home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 147 / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin / tools / rb / jydrv220.lzh / JOYDRV.S < prev    next >
Text File  |  1999-08-09  |  79KB  |  3,197 lines

  1. .cpu    68000
  2.  
  3. JOY_MAX        equ    7                * 接続可能パット数
  4. RCV_BUF_SIZE    equ    1024                * 受信バッファサイズ
  5. DATA_SIZE    equ    256                * データサイズ
  6. PAD_TYPE_ATARI    equ    $0000                * パッドタイプ = アタリ
  7. PAD_TYPE_MD    equ    $0001                * パッドタイプ = メガドライブ
  8. PAD_TYPE_SS    equ    $0002                * パッドタイプ = サターン
  9. PAD_TYPE_PS    equ    $0003                * パッドタイプ = プレイステーション
  10. PAD_TYPE_NOTAP    equ    $0000                * マルチタップ無し
  11. PAD_TYPE_MTAP    equ    $0100                * マルチタップ有り
  12.  
  13. COM_DATA_INIT    .macro
  14.     .dc.l    0                    * ドライバ JOYDRV
  15.     .dc.l    0                    * 現在処理中のバッファ領域
  16.     .dc.l    0                    * データを出力するバッファ領域
  17.     .dc.w    JOY_MAX-1                * JOY STICKポート1 最大パッド数
  18.     .dc.w    2                    * マルチタップ判定を行う(キャッシュあり)
  19.     .dc.w    1                    * JOYDRV拡張モード
  20.     .dc.w    0                    * WAIT補正値
  21.     .dcb.b    RCV_BUF_SIZE,$00            * 受信バッファ
  22. .endm
  23.  
  24. JOY_DATA_INIT    .macro
  25.     .dc.l    $FFFFFFFF                * パッドタイプ = 不明
  26.     .dc.w    $ffff                    * データはキャッシュされていない(キャッシュしているパッドタイプ)
  27.     .dc.w    $ffff                    * 読み込みポート($0000:ポート1 $0002:ポート2 $ffff:読み込み無し)
  28.     .dc.l    0                    * 送信データアドレス
  29.     .dc.w    $ffff                    * デジタルデータ
  30.     .dc.w    $00ff                    * アナログデータ有効範囲
  31.     .dc.b    $80                    * 左・上下
  32.     .dc.b    $80                    * 左・左右
  33.     .dc.b    $80                    * 右・上下
  34.     .dc.b    $80                    * 右・左右
  35.     .dc.b    $00                    * ボタン1
  36.     .dc.b    $00                    * ボタン2
  37.     .dc.b    $00                    * ボタン3
  38.     .dc.b    $00                    * ボタン4
  39.     .dc.b    $00,$00                    * ON:OFFカウント
  40.     .dc.b    $00,$00                    * ON:OFFカウント
  41.     .dc.b    $00,$00                    * ON:OFFカウント
  42.     .dc.b    $00,$00                    * ON:OFFカウント
  43.     .dc.b    $00,$00                    * ON:OFFカウント
  44.     .dc.b    $00,$00                    * ON:OFFカウント
  45.     .dc.b    $00,$00                    * ON:OFFカウント
  46.     .dc.b    $00,$00                    * ON:OFFカウント
  47.     .dc.b    $00,$00                    * ON:OFFカウント
  48.     .dc.b    $00,$00                    * ON:OFFカウント
  49.     .dc.b    $00,$00                    * ON:OFFカウント
  50.     .dc.b    $00,$00                    * ON:OFFカウント
  51.     .dc.b    $00,$00                    * ON:OFFカウント
  52.     .dc.b    $00,$00                    * ON:OFFカウント
  53.     .dc.b    $00,$00                    * ON:OFFカウント
  54.     .dc.b    $00,$00                    * ON:OFFカウント
  55.     .dc.l    $ffffffff                * PSパッドアクセス間隔計測用
  56.     .dc.w    $0000                    * プレイステーション振動パッドステータス
  57.     .dcb.b    66,$00                    * 予備(+1=128)
  58.  
  59.     .dc.w    0                    * ビット変換無し
  60.     .dc.l    $0003004f                * 十字キーエミュレート(上下左右,しきい値$4F)
  61.     .dc.w    0                    * モーター振動ステータス
  62.     .dc.w    0                    * START,SELECTボタンモード(通常)
  63.     .dc.w    $fffe                    * 変換データ
  64.     .dc.w    $fffd                    * 変換データ
  65.     .dc.w    $fffb                    * 変換データ
  66.     .dc.w    $fff7                    * 変換データ
  67.     .dc.w    $ffef                    * 変換データ
  68.     .dc.w    $ffdf                    * 変換データ
  69.     .dc.w    $ffbf                    * 変換データ
  70.     .dc.w    $ff7f                    * 変換データ
  71.     .dc.w    $feff                    * 変換データ
  72.     .dc.w    $fdff                    * 変換データ
  73.     .dc.w    $fbff                    * 変換データ
  74.     .dc.w    $f7ff                    * 変換データ
  75.     .dc.w    $efff                    * 変換データ
  76.     .dc.w    $dfff                    * 変換データ
  77.     .dc.w    $bfff                    * 変換データ
  78.     .dc.w    $7fff                    * 変換データ
  79.     .dc.b    $00,$00                    * 連射モード(ON数:OFF数)
  80.     .dc.b    $00,$00                    * 連射モード(ON数:OFF数)
  81.     .dc.b    $00,$00                    * 連射モード(ON数:OFF数)
  82.     .dc.b    $00,$00                    * 連射モード(ON数:OFF数)
  83.     .dc.b    $00,$00                    * 連射モード(ON数:OFF数)
  84.     .dc.b    $00,$00                    * 連射モード(ON数:OFF数)
  85.     .dc.b    $00,$00                    * 連射モード(ON数:OFF数)
  86.     .dc.b    $00,$00                    * 連射モード(ON数:OFF数)
  87.     .dc.b    $00,$00                    * 連射モード(ON数:OFF数)
  88.     .dc.b    $00,$00                    * 連射モード(ON数:OFF数)
  89.     .dc.b    $00,$00                    * 連射モード(ON数:OFF数)
  90.     .dc.b    $00,$00                    * 連射モード(ON数:OFF数)
  91.     .dc.b    $00,$00                    * 連射モード(ON数:OFF数)
  92.     .dc.b    $00,$00                    * 連射モード(ON数:OFF数)
  93.     .dc.b    $00,$00                    * 連射モード(ON数:OFF数)
  94.     .dc.b    $00,$00                    * 連射モード(ON数:OFF数)
  95.  
  96.     .dcb.b    54,$00                    * 末端+1 = 256
  97. .endm
  98.  
  99. .offset        0                    * 共通データ領域フォーマット
  100. COM_CTRL_DRV:
  101.     .ds.l    1                    * 制御ドライバ指定
  102. COM_DIS_JOYBUF:
  103.     .ds.l    1                    * 現在処理中のバッファ領域
  104. COM_OUT_JOYBUF:
  105.     .ds.l    1                    * データを出力するバッファ領域
  106. COM_JOY1_MAX:
  107.     .ds.w    1                    * JOY STICKポート1 最大パッド数
  108. COM_HANTEI_MODE:
  109.     .ds.w    1                    * パッド接続ケーブル/マルチタップ判定モード
  110. COM_IOCS3B_OUT:
  111.     .ds.w    1                    * IOCS$3B出力モード
  112. COM_WAIT_HOSEI:
  113.     .ds.w    1                    * WAIT補正値
  114. COM_RCV_BUF:
  115.     .ds.b    RCV_BUF_SIZE                * 受信バッファ
  116.  
  117. .offset        0                    * ジョイスティック別データ領域フォーマット
  118. JOY_PAD_TYPE:
  119.     .ds.l    1                    * パッドタイプ
  120. JOY_CACHE_STS:
  121.     .ds.w    1                    * マルチタップキャッシュ制御
  122. JOY_PORT_NO:
  123.     .ds.w    1                    * ポート番号
  124. JOY_SND_BUF:
  125.     .ds.l    1                    * 送信バッファアドレス
  126. JOY_D_DATA:
  127.     .ds.w    1                    * デジタルデータ
  128. JOY_ANALOG_FLG:
  129.     .ds.w    1                    * アナログデータ有効フラグ
  130. JOY_LUD_DATA:
  131.     .ds.b    1                    * 左・上下
  132. JOY_LLR_DATA:
  133.     .ds.b    1                    * 左・左右
  134. JOY_RUD_DATA:
  135.     .ds.b    1                    * 右・上下
  136. JOY_RLR_DATA:
  137.     .ds.b    1                    * 右・左右
  138. JOY_BTN1_DATA:
  139.     .ds.b    1                    * ボタン1
  140. JOY_BTN2_DATA:
  141.     .ds.b    1                    * ボタン2
  142. JOY_BTN3_DATA:
  143.     .ds.b    1                    * ボタン3
  144. JOY_BTN4_DATA:
  145.     .ds.b    1                    * ボタン4
  146. JOY_ONOFF_CNT:
  147.     .ds.w    16                    * 連射モードON:OFFカウント
  148. JOY_PS_MOTOR_TIME:
  149.     .ds.l    1                    * PSパッドアクセス間隔計測用
  150. JOY_PS_MOTOR_STS:
  151.     .ds.w    1                    * プレイステーション振動パッドステータス
  152. JOY_YOBI_001:
  153.     .ds.b    66                    * 予約領域(66バイト)
  154. JOY_CNV_MODE:
  155.     .ds.w    1                    * ビット変換モード
  156. JOY_PLUS_EMU:
  157.     .ds.l    1                    * アナログスティック -> 十字キーエミュレート
  158. JOY_MOTOR_STS:
  159.     .ds.w    1                    * モーターステータス
  160. JOY_STASEL_MODE:
  161.     .ds.w    1                    * START,SELECTボタンモード
  162. JOY_CNV_DATA:
  163.     .ds.w    16                    * ビット変換データ
  164. JOY_ONOFF_SU:
  165.     .ds.w    16                    * 連射モードON:OFF数
  166. JOY_YOBI_002:
  167.     .ds.b    54                    * 予約領域(54バイト)
  168.  
  169. .text
  170. DEVHEAD:
  171.     .dc.l    $ffffffff                * リンクポインタ
  172.     .dc.w    $8020                    * デバイス属性
  173.     .dc.l    STRTG_RTN                * ストラテジルーチンアドレス
  174.     .dc.l    DEV_RTN                    * ドライバルーチンアドレス
  175. KEEP_CHK_NAME:
  176.     .dc.b    'JOYDRV*/'                * デバイス名
  177. KEEP_CHK_VER:
  178.     .dc.b    $02,$02,$00,' '                * バージョン(X.XXY) X:数値 Y:アルファベット
  179.  
  180. * D0 : ワーク(デジタルデータ)
  181. * D1 : ジョイスティク番号
  182. * D2 : ワーク
  183. * D3 : ワーク
  184. * D4 : ワーク
  185. * D5 : ワーク
  186. * D6 : ワーク
  187. * A0 : サブルーチン用引き数(ワーク)
  188. * A1 : $e9a001
  189. * A2 : $e9a007
  190. * A3 : バッファアドレス
  191. * A4 : ワーク
  192.  
  193. IOCS3B:                            * IOCS3B処理
  194.     tst.w    d1
  195.     bmi    MODECNV_RTN                * モード変更か?
  196.     movem.l    d1-d6/a1-a4,-(a7)            * レジスタ保存
  197.     lea.l    $e9a001,a1                * ジョイスティックI/Oアドレス
  198.     lea.l    6(a1),a2                * ジョイスティックI/Oアドレス
  199.     move.w    COM_DATA+COM_HANTEI_MODE(pc),d0
  200.     beq    ATARI68                    * アタリ他68通常パッド読み込み
  201.     move.b    #9,(a2)                    * ON
  202.     tst.b    (a1)                    * WAIT
  203.     move.b    (a1),d0
  204.     andi.b    #$0f,d0
  205.     cmpi.b    #2,d0
  206.     beq    PS_CABLE                * プレイステーション接続ケーブルか?
  207.     cmpi.b    #1,d0
  208.     beq    SATURN_EXT                * セガサターンマルチタップまたはマルチコンか?
  209.     cmpi.b    #3,d0
  210.     beq    MD_MTAP                    * メガドライブマルチタップか?
  211.     tst.w    d1
  212.     bne    ATARI68
  213.     andi.b    #7,d0                    * 下位3ビット有効
  214.     cmpi.b    #4,d0
  215.     beq    SATURN_NORMAL                * サターンパットか?
  216.  
  217. ATARI68:                        * アタリ他68通常パッド読み込み
  218.     moveq.l    #$ff,d0                    * パッドタイプ = 不明
  219.     cmpi.w    #2,d1
  220.     bcc    IOCS3B_ERROR                * ジョイスティック番号が範囲外か?
  221.     move.w    d1,d0
  222.     add.w    d0,d0                    * ジョイスティック番号*2
  223. ATARI68_1:                        * ここに飛ぶには、d0に(0,2)とd1にJOY番号をセットすること
  224.     moveq.l    #8,d2
  225.     add.b    d0,d2                    * ビットOFF情報取得
  226.     moveq.l    #9,d3
  227.     add.b    d0,d3                    * ビットON情報取得
  228.     moveq.l    #0,d4                    * パッドタイプ = アタリ
  229.     adda.w    d0,a1
  230.     lsl.w    #8,d1
  231.     lea.l    JOY_DATA(pc),a0
  232.     adda.w    d1,a0
  233.     move.w    d0,JOY_PORT_NO(a0)            * ポート番号設定
  234.     move.w    sr,d5                    * SRレジスタ保持
  235.     ori.w    #$0700,sr                * 割り込み禁止
  236.     move.b    d3,(a2)                    * ON
  237.     move.b    d2,(a2)                    * OFF
  238.     move.b    d3,(a2)                    * ON
  239.     move.b    d2,(a2)                    * OFF
  240.     move.b    d3,(a2)                    * ON
  241.     moveq.l    #$ff,d0                    * WAIT
  242.     tst.b    (a1)
  243.     move.b    (a1),d0                    * ポート読み込み
  244.     move.b    d2,(a2)                    * OFF
  245.     move.b    d0,d2                    * WAIT
  246.     tst.b    (a1)
  247.     move.b    (a1),d0                    * ポート読み込み
  248.     move.b    d3,(a2)                    * ON
  249.     move.b    d0,d3
  250.     tst.w    JOY_STASEL_MODE(a0)
  251.     bne    ATARI68_3                * START,SELECTボタンがFM-TOWNSモードか?
  252.     andi.b    #$0c,d0
  253.     bne    ATARI68_3                * 変換コネクタを使用していないか?
  254.     move.b    (a1),d1                    * 6ボタン情報読み込み
  255.     move.l    #PAD_TYPE_MD*65536+PAD_TYPE_NOTAP+$01,d4    * パッドタイプ = メガドラ6B
  256.     move.b    d3,d0
  257.     andi.b    #$0f,d0
  258.     beq    ATARI68_2                * 6ボタンか?
  259.     st.b    d1                    * 3ボタンの時,6ボタンの位置を無効にする
  260.     clr.b    d4                    * パッドタイプ = メガドラ3B
  261. ATARI68_2:
  262.     ori.b    #$f0,d1                    * 未使用ビット消去
  263.     ori.b    #$0f,d3                    * 未使用ビット消去
  264.     and.b    d1,d3                    * アダプタと同じ情報を生成する
  265.     exg.l    d3,d2                    * 情報交換
  266. ATARI68_3:
  267.     move.w    d5,sr                    * SRレジスタ復帰
  268.     move.b    d2,d0
  269.     lsl.w    #8,d0
  270.     move.b    d2,d0
  271.     lsl.b    #1,d0
  272.     asr.b    #2,d0
  273.     ori.w    #$f06f,d0                * 6ボタン情報とSTARTとAボタンのみにする(bit 7..START bit 4..A)
  274.     and.b    d3,d0                    * 十字キーの情報にSTARTとAボタン情報を付加する
  275.     tst.w    JOY_STASEL_MODE(a0)
  276.     bne    ATARI68_4                * START,SELECTボタンがFM-TOWNSモードか?
  277.     btst.l    #11,d0
  278.     bne    ATARI68_10
  279.     andi.w    #$7fff,d0
  280.     bra    ATARI68_10
  281. ATARI68_4:
  282.     ori.b    #$80,d0
  283.     move.b    d0,d2
  284.     andi.b    #$0c,d2
  285.     bne    ATARI68_5
  286.     andi.b    #$7f,d0
  287.     ori.b    #$0c,d0
  288. ATARI68_5:
  289.     move.b    d0,d2
  290.     andi.b    #$03,d2
  291.     bne    ATARI68_10
  292.     andi.w    #$7fff,d0
  293.     ori.b    #$03,d0
  294. ATARI68_10:
  295.     move.l    a0,COM_DATA+COM_OUT_JOYBUF
  296.     move.l    d4,JOY_PAD_TYPE(a0)            * パッドタイプ保存
  297.     move.w    #$ffff,JOY_CACHE_STS(a0)        * キャッシュ無し
  298.     move.w    d0,JOY_D_DATA(a0)            * デジタルデータ
  299.     clr.b    JOY_ANALOG_FLG+1(a0)            * アナログ読み込み無し
  300.     move.b    #$80,JOY_LUD_DATA(a0)            * 左・上下
  301.     move.b    #$80,JOY_LLR_DATA(a0)            * 左・左右
  302.     move.b    #$80,JOY_RUD_DATA(a0)            * 右・上下
  303.     move.b    #$80,JOY_RLR_DATA(a0)            * 右・左右
  304.     clr.b    JOY_BTN1_DATA(a0)            * ボタン1
  305.     clr.b    JOY_BTN2_DATA(a0)            * ボタン2
  306.     clr.b    JOY_BTN3_DATA(a0)            * ボタン3
  307.     clr.b    JOY_BTN4_DATA(a0)            * ボタン4
  308.     bsr    LENSHA_MODE
  309.     bsr    BIT_CNV_MODE
  310.  
  311. IOCS3B_SET:
  312.     movea.l    COM_DATA+COM_OUT_JOYBUF(pc),a0
  313.     move.w    COM_DATA+COM_IOCS3B_OUT(pc),d1
  314.     bne    IOCS3B_SET_1
  315.     moveq.l    #0,d0
  316.     move.b    JOY_D_DATA+1(a0),d0            * デジタルデータ
  317.     ori.b    #$90,d0
  318.     bra    IOCS3B_END
  319. IOCS3B_SET_1:
  320.     moveq.l    #$ff,d0
  321.     move.w    JOY_D_DATA(a0),d0            * デジタルデータ
  322. IOCS3B_END:                        * IOCS3B処理終了
  323.     movem.l    (a7)+,d1-d6/a1-a4            * レジスタ復帰
  324.     rts
  325.  
  326. IOCS3B_ERROR:                        * D1.W にJOY番号を格納
  327.     cmpi.w    #JOY_MAX,d1
  328.     bcc    IOCS3B_ERROR_10
  329.     lsl.w    #8,d1
  330.     lea.l    JOY_DATA(pc),a0
  331.     adda.w    d1,a0
  332.     moveq.l    #$ff,d0
  333.     move.l    a0,COM_DATA+COM_OUT_JOYBUF
  334.     move.l    d0,JOY_PAD_TYPE(a0)            * パッドタイプ不明
  335.     move.w    d0,JOY_PORT_NO(a0)            * ポート番号(読み込み無し)
  336.     move.w    d0,JOY_CACHE_STS(a0)            * キャッシュ無し
  337.     move.w    d0,JOY_D_DATA(a0)            * デジタルデータ
  338.     clr.b    JOY_ANALOG_FLG+1(a0)            * アナログ読み込み無し
  339.     move.b    #$80,JOY_LUD_DATA(a0)            * 左・上下
  340.     move.b    #$80,JOY_LLR_DATA(a0)            * 左・左右
  341.     move.b    #$80,JOY_RUD_DATA(a0)            * 右・上下
  342.     move.b    #$80,JOY_RLR_DATA(a0)            * 右・左右
  343.     clr.b    JOY_BTN1_DATA(a0)            * ボタン1
  344.     clr.b    JOY_BTN2_DATA(a0)            * ボタン2
  345.     clr.b    JOY_BTN3_DATA(a0)            * ボタン3
  346.     clr.b    JOY_BTN4_DATA(a0)            * ボタン4
  347. IOCS3B_ERROR_10:
  348.     moveq.l    #0,d0                    * エラー
  349.     bra    IOCS3B_END
  350.  
  351. * D4-6 : 破壊
  352. * A4 : 破壊
  353. LENSHA_MODE:
  354.     move.l    a3,-(a7)
  355.     lea.l    JOY_ONOFF_SU(a0),a3
  356.     lea.l    JOY_ONOFF_CNT(a0),a4
  357.     move.w    JOY_D_DATA(a0),d4
  358.     moveq.l    #0,d5
  359.     moveq.l    #16-1,d6
  360. LENSHA_MODE_1:
  361.     btst.l    d5,d4
  362.     bne    LENSHA_MODE_10
  363.     tst.w    (a3)
  364.     beq    LENSHA_MODE_11
  365. LENSHA_MODE_2:
  366.     tst.b    (a4)
  367.     beq    LENSHA_MODE_3
  368.     subq.b    #1,(a4)
  369.     bra    LENSHA_MODE_11
  370. LENSHA_MODE_3:
  371.     tst.b    1(a4)
  372.     beq    LENSHA_MODE_4
  373.     subq.b    #1,1(a4)
  374.     bset.l    d5,d4
  375.     bra    LENSHA_MODE_11
  376. LENSHA_MODE_4:
  377.     move.w    (a3),(a4)
  378.     bra    LENSHA_MODE_2
  379. LENSHA_MODE_10:
  380.     move.w    (a3),(a4)
  381. LENSHA_MODE_11:
  382.     addq.w    #2,a3
  383.     addq.w    #2,a4
  384.     addq.b    #1,d5
  385.     dbra    d6,LENSHA_MODE_1
  386.     move.w    D4,JOY_D_DATA(a0)
  387.     movea.l    (a7)+,a3
  388.     rts
  389.  
  390. * D4-6 : 破壊
  391. * A4   : 破壊
  392. BIT_CNV_MODE:
  393.     tst.w    JOY_CNV_MODE(a0)
  394.     beq    BIT_CNV_MODE_3
  395.     lea.l    JOY_CNV_DATA+30(a0),a4
  396.     moveq.l    #15,d6
  397.     moveq.l    #$ff,d5
  398.     move.w    JOY_D_DATA(a0),d4
  399. BIT_CNV_MODE_1:
  400.     btst.l    d6,d4
  401.     bne    BIT_CNV_MODE_2
  402.     and.w    (a4),d5
  403. BIT_CNV_MODE_2:
  404.     subq.w    #2,a4
  405.     dbra    d6,BIT_CNV_MODE_1
  406.     move.w    d5,JOY_D_DATA(a0)
  407. BIT_CNV_MODE_3:
  408.     rts
  409.  
  410. * D4-D6 : 破壊
  411. *
  412. PLUS_EMU_SET:                        * 十字キーエミュレート設定
  413.     move.w    JOY_PLUS_EMU(a0),d6
  414.     and.w    JOY_ANALOG_FLG(a0),d6
  415.     move.w    JOY_PLUS_EMU+2(a0),d5
  416.     btst.l    #1,d6
  417.     beq    PLUS_EMU_SET_2
  418.     move.b    JOY_LLR_DATA(a0),d4
  419.     bmi    PLUS_EMU_SET_1
  420.     cmp.b    d5,d4
  421.     bgt    PLUS_EMU_SET_2
  422.     andi.w    #$fffb,JOY_D_DATA(a0)            * 左キーエミュレート
  423.     bra    PLUS_EMU_SET_2
  424. PLUS_EMU_SET_1:
  425.     not.b    d4
  426.     cmp.b    d5,d4
  427.     bgt    PLUS_EMU_SET_2
  428.     andi.w    #$fff7,JOY_D_DATA(a0)            * 右キーエミュレート
  429. PLUS_EMU_SET_2:
  430.     btst.l    #0,d6
  431.     beq    PLUS_EMU_SET_4
  432.     move.b    JOY_LUD_DATA(a0),d4
  433.     bmi    PLUS_EMU_SET_3
  434.     cmp.b    d5,d4
  435.     bgt    PLUS_EMU_SET_4
  436.     andi.w    #$fffe,JOY_D_DATA(a0)            * 上キーエミュレート
  437.     bra    PLUS_EMU_SET_4
  438. PLUS_EMU_SET_3:
  439.     not.b    d4
  440.     cmp.b    d5,d4
  441.     bgt    PLUS_EMU_SET_4
  442.     andi.w    #$fffd,JOY_D_DATA(a0)            * 下キーエミュレート
  443. PLUS_EMU_SET_4:
  444.     btst.l    #3,d6
  445.     beq    PLUS_EMU_SET_6
  446.     move.b    JOY_RLR_DATA(a0),d4
  447.     bmi    PLUS_EMU_SET_5
  448.     cmp.b    d5,d4
  449.     bgt    PLUS_EMU_SET_6
  450.     andi.w    #$fbff,JOY_D_DATA(a0)            * 左キーエミュレート
  451.     bra    PLUS_EMU_SET_6
  452. PLUS_EMU_SET_5:
  453.     not.b    d4
  454.     cmp.b    d5,d4
  455.     bgt    PLUS_EMU_SET_6
  456.     andi.w    #$f7ff,JOY_D_DATA(a0)            * 右キーエミュレート
  457. PLUS_EMU_SET_6:
  458.     btst.l    #2,d6
  459.     beq    PLUS_EMU_SET_8
  460.     move.b    JOY_RUD_DATA(a0),d4
  461.     bmi    PLUS_EMU_SET_7
  462.     cmp.b    d5,d4
  463.     bgt    PLUS_EMU_SET_8
  464.     andi.w    #$feff,JOY_D_DATA(a0)            * 上キーエミュレート
  465.     bra    PLUS_EMU_SET_8
  466. PLUS_EMU_SET_7:
  467.     not.b    d4
  468.     cmp.b    d5,d4
  469.     bgt    PLUS_EMU_SET_8
  470.     andi.w    #$fdff,JOY_D_DATA(a0)            * 下キーエミュレート
  471. PLUS_EMU_SET_8:
  472.     rts
  473.  
  474. SATURN_NORMAL:                        * サターン,ノーマルパッド読み込み
  475.     moveq.l    #$ff,d0                    * データ初期化
  476.     moveq.l    #8,d2
  477.     move.b    (a1),d0                    * ポート読み込み(Lボタン)
  478.     move.b    d2,(a2)                    * PC4 = 0
  479.     moveq.l    #9,d3
  480.     lsl.w    #8,d1
  481.     lea.l    JOY_DATA(pc),a0
  482.     adda.w    d1,a0
  483.     lsl.b    #1,d0
  484.     ori.b    #$e0,d0                    * Lボタンのみ有効にする
  485.     tst.b    (a1)                    * WAIT
  486.     move.b    (a1),d4                    * ポート読み込み(上,下,左,右)
  487.     move.b    d3,(a2)                    * PC4 = 1
  488.     move.b    #$d,(a2)                * PC6 = 1
  489.     andi.b    #$0f,d4                    * 方向キーのみを有効にする
  490.     andi.b    #$f0,d0                    * WAIT
  491.     tst.b    (a1)                    * WAIT
  492.     move.b    (a1),d1                    * ポート読み込み(START,A,C,B)
  493.     move.b    d2,(a2)                    * PC4 = 0
  494.     lsl.b    #4,d1
  495.     or.b    d1,d4                    * 上,下,左,右 + START,A,C,B
  496.     tst.b    (a1)                    * WAIT
  497.     move.b    (a1),d1                    * ポート読み込み(Rボタン,X,Y,Z)
  498.     move.b    d3,(a2)                    * PC4 = 1
  499.     move.b    #$c,(a2)                * PC6 = 0
  500.     andi.b    #$0f,d1                    * ボタンのみを有効にする
  501.     or.b    d1,d0                    * L + R,X,Y,Z
  502.     lsl.w    #8,d0                    * L,R,X,Y,Zを上位に
  503.     move.b    d4,d0                    * 全データセット
  504.     move.l    a0,COM_DATA+COM_OUT_JOYBUF
  505.     move.l    #PAD_TYPE_SS*65536,JOY_PAD_TYPE(a0)    * パッドタイプ = サターンデジタル(マルチタップ無し)
  506.     clr.w    JOY_PORT_NO(a0)                * ポート番号設定(PORT1)
  507.     move.w    #$ffff,JOY_CACHE_STS(a0)        * キャッシュ無し
  508.     move.w    d0,JOY_D_DATA(a0)            * デジタルデータ
  509.     clr.b    JOY_ANALOG_FLG+1(a0)            * アナログ読み込み無し
  510.     move.b    #$80,JOY_LUD_DATA(a0)            * 左・上下
  511.     move.b    #$80,JOY_LLR_DATA(a0)            * 左・左右
  512.     move.b    #$80,JOY_RUD_DATA(a0)            * 右・上下
  513.     move.b    #$80,JOY_RLR_DATA(a0)            * 右・左右
  514.     clr.b    JOY_BTN1_DATA(a0)            * ボタン1
  515.     clr.b    JOY_BTN2_DATA(a0)            * ボタン2
  516.     clr.b    JOY_BTN3_DATA(a0)            * ボタン3
  517.     clr.b    JOY_BTN4_DATA(a0)            * ボタン4
  518.     bsr    LENSHA_MODE
  519.     bsr    BIT_CNV_MODE
  520.     bra    IOCS3B_SET
  521.  
  522. SATURN_EXT:                        * サターン,マルチタップ読み込み
  523.     move.b    #8,(a2)                    * PC4 = 0
  524.     moveq.l    #4,d0
  525.     bsr    JOY_WAIT
  526.     move.l    #PAD_TYPE_SS*65536,d2            * パッドタイプ = サターン
  527.     moveq.l    #1,d3                    * 接続コントローラ数
  528. SATURN_EXT_1:
  529.     bsr    SATURN_GETDATA                * データ読み込み
  530.     cmpi.b    #4,d5
  531.     bne    SATURN_EXT_2                * マルチタップ以外か?
  532.     bsr    SATURN_GETDATA                * データ読み込み
  533.     move.w    d5,d3                    * 接続コントローラ数設定
  534.     move.w    #PAD_TYPE_MTAP,d2            * パッドタイプ = サターン + マルチタップ
  535.     bra    SATURN_EXT_1
  536. SATURN_EXT_2:
  537.     cmp.w    COM_DATA+COM_JOY1_MAX(pc),d3
  538.     ble    SATURN_EXT_3
  539.     move.w    COM_DATA+COM_JOY1_MAX(pc),d3
  540. SATURN_EXT_3:
  541.     cmp.w    d3,d1
  542.     beq    SATURN_EXT_ERROR3            * タップ最大数+1
  543.     bgt    SATURN_EXT_ERROR2            * JOY番号範囲外
  544.     lea.l    JOY_DATA(pc),a0
  545.     move.w    d1,d0
  546.     lsl.w    #8,d0
  547.     adda.w    d0,a0                    * 対象JOY番号のデータ領域
  548.     move.l    a0,COM_DATA+COM_OUT_JOYBUF        * 出力バッファ
  549.     cmpi.w    #1,COM_DATA+COM_HANTEI_MODE
  550.     beq    SATURN_EXT_4                * キャッシュ無し指定か
  551.     cmpi.w    #PAD_TYPE_SS,JOY_CACHE_STS(a0)
  552.     beq    SATURN_EXT_9                * サターンでキャッシュされているデータがあるか
  553. SATURN_EXT_4:
  554.     lea.l    JOY_DATA(pc),a0
  555.     lea.l    COM_DATA+COM_RCV_BUF(pc),a3        * 受信バッファ
  556.     subq.w    #1,d3
  557.     bra    SATURN_EXT_6
  558. SATURN_EXT_5:
  559.     lea.l    DATA_SIZE(a0),a0            * 次のJOY番号のデータ領域
  560.     bsr    SATURN_GETDATA                * データ読み込み
  561. SATURN_EXT_6:
  562.     movea.l    a3,a4
  563.     move.b    d5,d2
  564.     move.b    d5,(a3)+                * コントローラタイプ
  565.     move.b    d6,(a3)+                * 転送バイト数
  566.     cmpi.b    #$f,d5
  567.     beq    SATURN_EXT_8                * コントローラが未接続か
  568.     move.w    d6,d4                    * 転送バイト数設定
  569.     subq.w    #1,d4
  570. SATURN_EXT_7:
  571.     bsr    SATURN_GETDATA                * データ読み込み
  572.     lsl.b    #4,d5
  573.     or.b    d5,d6
  574.     move.b    d6,(a3)+                * データセット
  575.     dbra    d4,SATURN_EXT_7
  576. SATURN_EXT_8:
  577.     move.l    d2,JOY_PAD_TYPE(a0)
  578.     move.w    #PAD_TYPE_SS,JOY_CACHE_STS(a0)        * キャッシュあり
  579.     clr.w    JOY_PORT_NO(a0)                * ポート番号設定(PORT1)
  580.     moveq.l    #0,d0
  581.     move.b    (a4)+,d0                * コントローラタイプ取得
  582.     add.w    d0,d0                    * 2倍
  583.     move.w    SATURN_PADTYPE(pc,d0.w),d0
  584.     jsr    SATURN_PADTYPE(pc,d0.w)            * タイプ別処理に飛ぶ
  585.     dbra    d3,SATURN_EXT_5
  586. SATURN_EXT_9:
  587.     move.b    #9,(a2)                    * PC4 = 1
  588.     movea.l    COM_DATA+COM_OUT_JOYBUF(pc),a0
  589.     move.w    #$ffff,JOY_CACHE_STS(a0)        * キャッシュ無し
  590.     bra    IOCS3B_SET
  591.  
  592. SATURN_PADTYPE:
  593.     .dc.w    SATURN_DIGITAL-SATURN_PADTYPE        * デジタルパッド
  594.     .dc.w    SATURN_ANALOG-SATURN_PADTYPE        * アナログパッド
  595.     .dc.w    SATURN_RESERVE-SATURN_PADTYPE        * ?
  596.     .dc.w    SATURN_RESERVE-SATURN_PADTYPE        * マルチタップ
  597.     .dc.w    SATURN_RESERVE-SATURN_PADTYPE        * ?
  598.     .dc.w    SATURN_RESERVE-SATURN_PADTYPE        * ?
  599.     .dc.w    SATURN_RESERVE-SATURN_PADTYPE        * ?
  600.     .dc.w    SATURN_RESERVE-SATURN_PADTYPE        * ?
  601.     .dc.w    SATURN_RESERVE-SATURN_PADTYPE        * ?
  602.     .dc.w    SATURN_RESERVE-SATURN_PADTYPE        * ?
  603.     .dc.w    SATURN_RESERVE-SATURN_PADTYPE        * ?
  604.     .dc.w    SATURN_RESERVE-SATURN_PADTYPE        * ?
  605.     .dc.w    SATURN_RESERVE-SATURN_PADTYPE        * ?
  606.     .dc.w    SATURN_RESERVE-SATURN_PADTYPE        * ?
  607.     .dc.w    SATURN_RESERVE-SATURN_PADTYPE        * ?
  608.     .dc.w    SATURN_NOPAD-SATURN_PADTYPE        * 未接続
  609.  
  610. SATURN_DIGITAL:
  611. SATURN_ANALOG:
  612.     clr.b    JOY_ANALOG_FLG+1(a0)            * アナログ読み込み情報クリア
  613.     move.b    (a4)+,d6                * 転送バイト数
  614.     move.b    (a4)+,d0                * 上、下、左、右 + B、C、A、STARTの読み込み
  615.     ror.b    #4,d0
  616.     move.b    d0,JOY_D_DATA+1(a0)
  617.     move.b    (a4)+,d0                * X、Y、Z、R + Lの読み込み
  618.     move.b    d0,d5
  619.     lsr.b    #4,d0
  620.     ori.b    #$e0,d0
  621.     lsl.b    #1,d5
  622.     andi.b    #$10,d5
  623.     or.b    d5,d0
  624.     move.b    d0,JOY_D_DATA(a0)
  625.     subq.b    #2,d6
  626.     beq    SATURN_ANALOG_1
  627.     move.b    (a4)+,JOY_LLR_DATA(a0)            * 左右アナログ値セット
  628.     ori.b    #$02,JOY_ANALOG_FLG+1(a0)        * 左右アナログ値有効
  629.     subq.b    #1,d6
  630.     beq    SATURN_ANALOG_2
  631.     move.b    (a4)+,JOY_LUD_DATA(a0)            * 上下アナログ値セット
  632.     ori.b    #$01,JOY_ANALOG_FLG+1(a0)        * 上下アナログ値有効
  633.     subq.b    #1,d6
  634.     beq    SATURN_ANALOG_3
  635.     move.b    (a4)+,JOY_BTN1_DATA(a0)            * Rアナログ値セット
  636.     ori.b    #$10,JOY_ANALOG_FLG+1(a0)        * Rアナログ値有効
  637.     subq.b    #1,d6
  638.     beq    SATURN_ANALOG_4
  639.     move.b    (a4)+,JOY_BTN2_DATA(a0)            * Lアナログ値セット
  640.     ori.b    #$20,JOY_ANALOG_FLG+1(a0)        * Lアナログ値有効
  641.     bra    SATURN_ANALOG_5
  642. SATURN_ANALOG_1:
  643.     move.b    #$80,JOY_LLR_DATA(a0)            * 左・左右
  644. SATURN_ANALOG_2:
  645.     move.b    #$80,JOY_LUD_DATA(a0)            * 左・上下
  646. SATURN_ANALOG_3:
  647.     clr.b    JOY_BTN1_DATA(a0)            * ボタン1
  648. SATURN_ANALOG_4:
  649.     clr.b    JOY_BTN2_DATA(a0)            * ボタン2
  650. SATURN_ANALOG_5:
  651.     move.b    #$80,JOY_RLR_DATA(a0)            * 右・左右
  652.     move.b    #$80,JOY_RUD_DATA(a0)            * 右・上下
  653.     clr.b    JOY_BTN3_DATA(a0)            * ボタン3
  654.     clr.b    JOY_BTN4_DATA(a0)            * ボタン4
  655.     bsr    LENSHA_MODE
  656.     bsr    BIT_CNV_MODE                * ビット変換
  657.     bsr    PLUS_EMU_SET                * 十字キーエミュレート設定
  658.     rts
  659.  
  660. SATURN_RESERVE:
  661. SATURN_NOPAD:
  662.     move.w    #$ffff,JOY_D_DATA(a0)            * デジタルデータ
  663.     clr.b    JOY_ANALOG_FLG+1(a0)            * アナログ読み込み無し
  664.     move.b    #$80,JOY_LUD_DATA(a0)            * 左・上下
  665.     move.b    #$80,JOY_LLR_DATA(a0)            * 左・左右
  666.     move.b    #$80,JOY_RUD_DATA(a0)            * 右・上下
  667.     move.b    #$80,JOY_RLR_DATA(a0)            * 右・左右
  668.     clr.b    JOY_BTN1_DATA(a0)            * ボタン1
  669.     clr.b    JOY_BTN2_DATA(a0)            * ボタン2
  670.     clr.b    JOY_BTN3_DATA(a0)            * ボタン3
  671.     clr.b    JOY_BTN4_DATA(a0)            * ボタン4
  672.     rts
  673.  
  674. SATURN_GETDATA:
  675.     move.b    #$d,(a2)                * PC6 = 1
  676.     moveq.l    #$7f,d0
  677. SATURN_GETDATA_1:
  678.     btst.b    #6,(a1)
  679.     dbeq    d0,SATURN_GETDATA_1            * ステータス待ち
  680.     bne    SATURN_EXT_ERROR1            * ケーブル接続エラー
  681.     move.b    (a1),d5                    * データ読み込み
  682.     move.b    #$c,(a2)                * PC6 = 0
  683.     andi.w    #$000f,d5                * 下位4ビットのみ有効
  684.     moveq.l    #$7f,d0
  685. SATURN_GETDATA_2:
  686.     btst.b    #6,(a1)
  687.     dbne    d0,SATURN_GETDATA_2            * ステータス待ち
  688.     beq    SATURN_EXT_ERROR1            * ケーブル接続エラー
  689.     move.b    (a1),d6                    * データ読み込み
  690.     andi.w    #$000f,d6                * 下位4ビットのみ有効
  691.     rts
  692.  
  693. SATURN_EXT_ERROR1:
  694.     addq.w    #4,a7                    * rts分補正
  695.     move.b    #$c,(a2)                * PC6 = 0
  696.     move.b    #9,(a2)                    * PC4 = 1
  697.     bra    ATARI68                    * アタリパッドの読み込み
  698. SATURN_EXT_ERROR2:
  699.     move.b    #9,(a2)                    * PC4 = 1
  700.     bra    IOCS3B_ERROR
  701. SATURN_EXT_ERROR3:
  702.     move.b    #9,(a2)                    * PC4 = 1
  703.     moveq.l    #2,d0                    * JOYSTICK PORT 1
  704.     bra    ATARI68_1
  705.  
  706. PS_CABLE_ERROR1:
  707.     moveq.l    #2,d0                    * JOYSTICK PORT 1
  708.     bra    ATARI68_1
  709.  
  710. PS_CABLE:
  711.     move.w    COM_DATA+COM_JOY1_MAX(pc),d2
  712.     cmpi.w    #JOY_MAX-1,d2
  713.     ble    PS_CABLE_1
  714.     moveq.l    #JOY_MAX-1,d2
  715. PS_CABLE_1:
  716.     cmp.w    d2,d1
  717.     beq    PS_CABLE_ERROR1                * マルチタップ最大数+1
  718.     bgt    IOCS3B_ERROR                * JOY番号が範囲外か
  719.     move.b    #8,(a2)                    * PC4 = 0
  720.     move.w    d1,d0
  721.     lsl.w    #8,d0
  722.     lea.l    JOY_DATA(pc),a0
  723.     adda.w    d0,a0                    * 対象JOY番号のデータ領域
  724.     move.l    a0,COM_DATA+COM_OUT_JOYBUF        * 出力バッファ
  725.     moveq.l    #11,d0                    * WAIT TIME
  726.     bsr    JOY_WAIT                * WAIT
  727.     move.w    d1,d4
  728.     addq.w    #1,d4                    * 読み込みパッド位置指定
  729.     bsr    PS_IF_PAD                * 通信
  730.     cmpi.w    #PAD_TYPE_PS,JOY_PAD_TYPE(a0)
  731.     bne    PS_CABLE_2                * パッドがPS以外だったか
  732.     cmpi.b    #$0f,JOY_PAD_TYPE+3(a0)
  733.     beq    PS_CABLE_2                * パッドが未接続だったか
  734.     movea.l    #$e8a000,a4                * RTC
  735.     move.b    $1b(a4),d0
  736.     andi.b    #$fe,d0
  737.     tst.b    (a1)
  738.     tst.b    (a1)
  739.     tst.b    (a1)
  740.     move.b    d0,$1b(a4)
  741.     tst.b    (a1)
  742.     tst.b    (a1)
  743.     tst.b    (a1)
  744. PS_MOTOR_TIMER_1:
  745.     moveq.l    #$1,d4
  746.     moveq.l    #$6-1,d5
  747. PS_MOTOR_TIMER_2:
  748.     move.b    0(a4,d4.w),d0
  749.     ror.l    #4,d0
  750.     addq.w    #2,d4
  751.     dbra    d5,PS_MOTOR_TIMER_2
  752.     lsr.l    #8,d0
  753.     moveq.l    #$1,d4
  754.     moveq.l    #$6-1,d5
  755. PS_MOTOR_TIMER_3:
  756.     move.b    0(a4,d4.w),d6
  757.     ror.l    #4,d6
  758.     addq.w    #2,d4
  759.     dbra    d5,PS_MOTOR_TIMER_3
  760.     lsr.l    #8,d6
  761.     cmp.l    d0,d6
  762.     bne    PS_MOTOR_TIMER_1
  763.     sub.l    JOY_PS_MOTOR_TIME(a0),d0
  764.     move.l    d6,JOY_PS_MOTOR_TIME(a0)
  765.     cmpi.l    #2,d0
  766.     bcs    PS_CABLE_3                * 2秒以内アクセスか
  767. PS_CABLE_2:
  768.     bsr    SET_PS_MOTOR_SND            * PSモーターコマンド送信パラメータ設定
  769. PS_CABLE_3:
  770.     movea.l    JOY_SND_BUF(a0),a4
  771.     movea.l    (a4),a4                    * データアドレス取得
  772.     move.w    JOY_MOTOR_STS(a0),d0
  773.     andi.w    #$01ff,d0
  774.     tst.b    JOY_PS_MOTOR_STS(a0)
  775.     bne    PS_CABLE_4                * デュアルショックか
  776.     lsr.w    #8,d0
  777.     ori.w    #$4000,d0
  778. PS_CABLE_4:
  779.     move.w    d0,PS_SND_NORMAL_DATA000+2        * モーターステータスセット
  780.     move.b    (a4)+,d4                * コマンド1バイト取り出し
  781.     bsr    PS_IF_PAD                * 通信
  782.     cmpi.b    #$ff,d4
  783.     beq    PS_CABLE_ERROR2
  784.     lea.l    COM_DATA+COM_RCV_BUF(pc),a3        * 受信バッファ
  785.     move.l    #PAD_TYPE_PS*65536,d2            * パッドタイプ = PS
  786.     move.b    d4,d2
  787.     lsr.b    #4,d2
  788.     move.b    d2,(a3)+                * コントローラタイプ
  789.     andi.w    #$000f,d4
  790.     add.b    d4,d4
  791.     move.b    d4,(a3)+                * 転送バイト数
  792.     move.w    d4,d3
  793. PS_CABLE_11:
  794.     move.b    (a4)+,d4                * コマンド1バイト取り出し
  795.     bsr    PS_IF_PAD                * 通信
  796.     move.b    d4,(a3)+
  797.     dbra    d3,PS_CABLE_11
  798. PS_CABLE_20:
  799.     move.b    #9,(a2)                    * PC4 = 1
  800.     move.w    #$ffff,JOY_CACHE_STS(a0)        * キャッシュ無し
  801.     clr.w    JOY_PORT_NO(a0)                * ポート番号設定(PORT1)
  802.     movea.l    JOY_SND_BUF(a0),a4
  803.     movea.l    6(a4),a4
  804.     move.l    a4,JOY_SND_BUF(a0)            * 次のデータアドレス
  805.     lea.l    COM_DATA+COM_RCV_BUF+1(pc),a3        * 受信バッファ
  806.     move.b    d2,d0
  807.     andi.w    #$00ff,d0
  808.     add.w    d0,d0                    * 2倍
  809.     move.w    PS_PADTYPE(pc,d0.w),d0
  810.     jmp    PS_PADTYPE(pc,d0.w)            * タイプ別処理に飛ぶ
  811.  
  812. PS_CABLE_ERROR2:
  813.     move.l    #PAD_TYPE_PS*65536+$0f,JOY_PAD_TYPE(a0)    * パッドタイプ = PS無接続
  814.     lea.l    PS_SND_NORMAL_000(pc),a4        * 通常パラメータ
  815.     move.l    a4,JOY_SND_BUF(a0)
  816.     clr.b    JOY_PS_MOTOR_STS(a0)
  817.     move.b    #9,(a2)                    * PC4 = 1
  818.     clr.w    JOY_PORT_NO(a0)                * ポート番号(PORT1)
  819.     moveq.l    #$ff,d0
  820.     move.w    d0,JOY_CACHE_STS(a0)            * キャッシュ無し
  821.     move.w    d0,JOY_D_DATA(a0)            * デジタルデータ
  822.     clr.b    JOY_ANALOG_FLG+1(a0)            * アナログ読み込み無し
  823.     move.b    #$80,JOY_LUD_DATA(a0)            * 左・上下
  824.     move.b    #$80,JOY_LLR_DATA(a0)            * 左・左右
  825.     move.b    #$80,JOY_RUD_DATA(a0)            * 右・上下
  826.     move.b    #$80,JOY_RLR_DATA(a0)            * 右・左右
  827.     clr.b    JOY_BTN1_DATA(a0)            * ボタン1
  828.     clr.b    JOY_BTN2_DATA(a0)            * ボタン2
  829.     clr.b    JOY_BTN3_DATA(a0)            * ボタン3
  830.     clr.b    JOY_BTN4_DATA(a0)            * ボタン4
  831.     bra    IOCS3B_SET
  832.  
  833. PS_PADTYPE:
  834.     .dc.w    PS_RESERVE-PS_PADTYPE            * ?
  835.     .dc.w    PS_MOUSE-PS_PADTYPE            * マウス
  836.     .dc.w    PS_ANALOG1-PS_PADTYPE            * アナログパッド(1STICK)
  837.     .dc.w    PS_RESERVE-PS_PADTYPE            * ?
  838.     .dc.w    PS_DIGITAL-PS_PADTYPE            * デジタルパッド
  839.     .dc.w    PS_ANALOG2-PS_PADTYPE            * アナログパッド(2STICK)
  840.     .dc.w    PS_RESERVE-PS_PADTYPE            * ?
  841.     .dc.w    PS_ANALOG2-PS_PADTYPE            * アナログパッド(2STICK)
  842.     .dc.w    PS_RESERVE-PS_PADTYPE            * ?
  843.     .dc.w    PS_RESERVE-PS_PADTYPE            * ?
  844.     .dc.w    PS_RESERVE-PS_PADTYPE            * ?
  845.     .dc.w    PS_RESERVE-PS_PADTYPE            * ?
  846.     .dc.w    PS_RESERVE-PS_PADTYPE            * ?
  847.     .dc.w    PS_RESERVE-PS_PADTYPE            * ?
  848.     .dc.w    PS_JOGCON-PS_PADTYPE            * ジョグコン
  849.     .dc.w    PS_UNKNOWPAD-PS_PADTYPE            * その他
  850.  
  851. PS_MOUSE:
  852.     move.l    d2,JOY_PAD_TYPE(a0)
  853.     clr.b    JOY_ANALOG_FLG+1(a0)            * アナログ読み込み情報クリア
  854.     move.b    (a3)+,d2                * サイズ取得
  855.     move.b    (a3)+,d3                * 通信ステータス取得
  856.     bsr    PS_DIGITAL_SET
  857.     subq.b    #2,d2
  858.     beq    PS_MOUSE_1
  859.     move.b    (a3)+,JOY_LUD_DATA(a0)            * 上下アナログ値セット
  860.     ori.b    #$01,JOY_ANALOG_FLG+1(a0)        * 上下アナログ値有効
  861.     subq.b    #1,d2
  862.     beq    PS_MOUSE_2
  863.     move.b    (a3)+,JOY_LLR_DATA(a0)            * 左右アナログ値セット
  864.     ori.b    #$02,JOY_ANALOG_FLG+1(a0)        * 左右アナログ値有効
  865.     subq.b    #1,d2
  866.     bra    PS_MOUSE_3
  867. PS_MOUSE_1:
  868.     move.b    #$80,JOY_LUD_DATA(a0)            * 左・上下
  869. PS_MOUSE_2:
  870.     move.b    #$80,JOY_LLR_DATA(a0)            * 左・左右
  871. PS_MOUSE_3:
  872.     move.b    #$80,JOY_RUD_DATA(a0)            * 右・上下
  873.     move.b    #$80,JOY_RLR_DATA(a0)            * 右・左右
  874.     clr.b    JOY_BTN1_DATA(a0)            * ボタン1
  875.     clr.b    JOY_BTN2_DATA(a0)            * ボタン2
  876.     clr.b    JOY_BTN3_DATA(a0)            * ボタン3
  877.     clr.b    JOY_BTN4_DATA(a0)            * ボタン4
  878.     bsr    PLUS_EMU_SET                * 十字キーエミュレート設定
  879.     cmpi.b    #$5a,d3
  880.     beq    PS_MOUSE_E
  881.     cmpi.l    #PS_SND_NORMAL_000,JOY_SND_BUF(a0)
  882.     bne    PS_MOUSE_E
  883.     bsr    SET_PS_MOTOR_SND            * PSモーターコマンド送信パラメータ設定
  884. PS_MOUSE_E:
  885.     bra    IOCS3B_SET
  886.  
  887. PS_ANALOG1:
  888.     move.l    d2,JOY_PAD_TYPE(a0)
  889.     clr.b    JOY_ANALOG_FLG+1(a0)            * アナログ読み込み情報クリア
  890.     move.b    (a3)+,d2                * サイズ取得
  891.     move.b    (a3)+,d3                * 通信ステータス取得
  892.     bsr    PS_DIGITAL_SET
  893.     subq.b    #2,d2
  894.     beq    PS_ANALOG1_1
  895.     move.b    (a3)+,JOY_LLR_DATA(a0)            * ねじり
  896.     ori.b    #$02,JOY_ANALOG_FLG+1(a0)        * 左右アナログ値有効
  897.     subq.b    #1,d2
  898.     beq    PS_ANALOG1_2
  899.     move.b    (a3)+,JOY_BTN1_DATA(a0)            * ボタン1
  900.     ori.b    #$10,JOY_ANALOG_FLG+1(a0)        * ボタン1有効
  901.     subq.b    #1,d2
  902.     beq    PS_ANALOG1_3
  903.     move.b    (a3)+,JOY_BTN2_DATA(a0)            * ボタン2
  904.     ori.b    #$20,JOY_ANALOG_FLG+1(a0)        * ボタン2有効
  905.     subq.b    #1,d2
  906.     beq    PS_ANALOG1_4
  907.     move.b    (a3)+,JOY_BTN3_DATA(a0)            * ボタン3
  908.     ori.b    #$40,JOY_ANALOG_FLG+1(a0)        * ボタン3有効
  909.     subq.b    #1,d2
  910.     bra    PS_ANALOG1_5
  911. PS_ANALOG1_1:
  912.     move.b    #$80,JOY_LLR_DATA(a0)            * 左・左右
  913. PS_ANALOG1_2:
  914.     clr.b    JOY_BTN1_DATA(a0)            * ボタン1
  915. PS_ANALOG1_3:
  916.     clr.b    JOY_BTN2_DATA(a0)            * ボタン2
  917. PS_ANALOG1_4:
  918.     clr.b    JOY_BTN3_DATA(a0)            * ボタン3
  919. PS_ANALOG1_5:
  920.     move.b    #$80,JOY_LUD_DATA(a0)            * 左・上下
  921.     move.b    #$80,JOY_RUD_DATA(a0)            * 右・上下
  922.     move.b    #$80,JOY_RLR_DATA(a0)            * 右・左右
  923.     clr.b    JOY_BTN4_DATA(a0)            * ボタン4
  924.     bsr    PLUS_EMU_SET                * 十字キーエミュレート設定
  925.     cmpi.b    #$5a,d3
  926.     beq    PS_ANALOG1_E
  927.     cmpi.l    #PS_SND_NORMAL_000,JOY_SND_BUF(a0)
  928.     bne    PS_ANALOG1_E
  929.     bsr    SET_PS_MOTOR_SND            * PSモーターコマンド送信パラメータ設定
  930. PS_ANALOG1_E:
  931.     bra    IOCS3B_SET
  932.  
  933. PS_DIGITAL:
  934.     move.l    d2,JOY_PAD_TYPE(a0)
  935.     clr.b    JOY_ANALOG_FLG+1(a0)            * アナログ読み込み情報クリア
  936.     move.b    (a3)+,d2                * サイズ取得
  937.     move.b    (a3)+,d3                * 通信ステータス取得
  938.     bsr    PS_DIGITAL_SET
  939.     move.b    #$80,JOY_LUD_DATA(a0)            * 左・上下
  940.     move.b    #$80,JOY_LLR_DATA(a0)            * 左・左右
  941.     move.b    #$80,JOY_RUD_DATA(a0)            * 右・上下
  942.     move.b    #$80,JOY_RLR_DATA(a0)            * 右・左右
  943.     clr.b    JOY_BTN1_DATA(a0)            * ボタン1
  944.     clr.b    JOY_BTN2_DATA(a0)            * ボタン2
  945.     clr.b    JOY_BTN3_DATA(a0)            * ボタン3
  946.     clr.b    JOY_BTN4_DATA(a0)            * ボタン4
  947.     cmpi.b    #$5a,d3
  948.     beq    PS_DIGITAL_E
  949.     cmpi.l    #PS_SND_NORMAL_000,JOY_SND_BUF(a0)
  950.     bne    PS_DIGITAL_E
  951.     bsr    SET_PS_MOTOR_SND            * PSモーターコマンド送信パラメータ設定
  952. PS_DIGITAL_E:
  953.     bra    IOCS3B_SET
  954.  
  955. PS_ANALOG2:
  956.     move.l    d2,JOY_PAD_TYPE(a0)
  957.     clr.b    JOY_ANALOG_FLG+1(a0)            * アナログ読み込み情報クリア
  958.     move.b    (a3)+,d2                * サイズ取得
  959.     move.b    (a3)+,d3                * 通信ステータス取得
  960.     bsr    PS_DIGITAL_SET
  961.     subq.b    #2,d2
  962.     beq    PS_ANALOG2_1
  963.     move.b    (a3)+,JOY_RLR_DATA(a0)            * 右・左右アナログ値セット
  964.     ori.b    #$08,JOY_ANALOG_FLG+1(a0)        * 右・左右アナログ値有効
  965.     subq.b    #1,d2
  966.     beq    PS_ANALOG2_2
  967.     move.b    (a3)+,JOY_RUD_DATA(a0)            * 右・上下アナログ値セット
  968.     ori.b    #$04,JOY_ANALOG_FLG+1(a0)        * 右・上下アナログ値有効
  969.     subq.b    #1,d2
  970.     beq    PS_ANALOG2_3
  971.     move.b    (a3)+,JOY_LLR_DATA(a0)            * 左・左右アナログ値セット
  972.     ori.b    #$02,JOY_ANALOG_FLG+1(a0)        * 左・左右アナログ値有効
  973.     subq.b    #1,d2
  974.     beq    PS_ANALOG2_4
  975.     move.b    (a3)+,JOY_LUD_DATA(a0)            * 左・上下アナログ値セット
  976.     ori.b    #$01,JOY_ANALOG_FLG+1(a0)        * 左・上下アナログ値有効
  977.     subq.b    #1,d2
  978.     bra    PS_ANALOG2_5
  979. PS_ANALOG2_1:
  980.     move.b    #$80,JOY_RLR_DATA(a0)            * 右・左右
  981. PS_ANALOG2_2:
  982.     move.b    #$80,JOY_RUD_DATA(a0)            * 右・上下
  983. PS_ANALOG2_3:
  984.     move.b    #$80,JOY_LLR_DATA(a0)            * 左・左右
  985. PS_ANALOG2_4:
  986.     move.b    #$80,JOY_LUD_DATA(a0)            * 左・上下
  987. PS_ANALOG2_5:
  988.     clr.b    JOY_BTN1_DATA(a0)            * ボタン1
  989.     clr.b    JOY_BTN2_DATA(a0)            * ボタン2
  990.     clr.b    JOY_BTN3_DATA(a0)            * ボタン3
  991.     clr.b    JOY_BTN4_DATA(a0)            * ボタン4
  992.     bsr    PLUS_EMU_SET                * 十字キーエミュレート設定
  993.     cmpi.b    #$5a,d3
  994.     beq    PS_ANALOG2_E
  995.     cmpi.l    #PS_SND_NORMAL_000,JOY_SND_BUF(a0)
  996.     bne    PS_ANALOG2_E
  997.     bsr    SET_PS_MOTOR_SND            * PSモーターコマンド送信パラメータ設定
  998. PS_ANALOG2_E:
  999.     bra    IOCS3B_SET
  1000.  
  1001. PS_JOGCON:
  1002.     move.l    d2,JOY_PAD_TYPE(a0)
  1003.     clr.b    JOY_ANALOG_FLG+1(a0)            * アナログ読み込み情報クリア
  1004.     move.b    (a3)+,d2                * サイズ取得
  1005.     move.b    (a3)+,d3                * 通信ステータス取得
  1006.     bsr    PS_DIGITAL_SET
  1007.     subq.b    #2,d2
  1008.     beq    PS_JOGCON_1
  1009.     move.b    (a3)+,JOY_LLR_DATA(a0)            * ジョグ回転値
  1010.     ori.b    #$02,JOY_ANALOG_FLG+1(a0)        * 左右アナログ値有効
  1011.     subq.b    #1,d2
  1012.     beq    PS_JOGCON_2
  1013.     move.b    (a3)+,JOY_BTN1_DATA(a0)            * 右に一回転すると+1、左に一回転すると-1
  1014.     ori.b    #$10,JOY_ANALOG_FLG+1(a0)        * ボタン1有効
  1015.     subq.b    #1,d2
  1016.     beq    PS_JOGCON_3
  1017.     move.b    (a3)+,JOY_BTN2_DATA(a0)            * 右に回転していると1、左に回転していると2、回転無しは0
  1018.     ori.b    #$20,JOY_ANALOG_FLG+1(a0)        * ボタン2有効
  1019.     subq.b    #1,d2
  1020.     beq    PS_JOGCON_4
  1021.     move.b    (a3)+,JOY_BTN3_DATA(a0)            * ?
  1022.     ori.b    #$40,JOY_ANALOG_FLG+1(a0)        * ボタン3有効
  1023.     subq.b    #1,d2
  1024.     bra    PS_JOGCON_5
  1025. PS_JOGCON_1:
  1026.     move.b    #$80,JOY_LLR_DATA(a0)            * 左・左右
  1027. PS_JOGCON_2:
  1028.     clr.b    JOY_BTN1_DATA(a0)            * ボタン1
  1029. PS_JOGCON_3:
  1030.     clr.b    JOY_BTN2_DATA(a0)            * ボタン2
  1031. PS_JOGCON_4:
  1032.     clr.b    JOY_BTN3_DATA(a0)            * ボタン3
  1033. PS_JOGCON_5:
  1034.     move.b    #$80,JOY_LUD_DATA(a0)            * 左・上下
  1035.     move.b    #$80,JOY_RUD_DATA(a0)            * 右・上下
  1036.     move.b    #$80,JOY_RLR_DATA(a0)            * 右・左右
  1037.     clr.b    JOY_BTN4_DATA(a0)            * ボタン4
  1038.     bsr    PLUS_EMU_SET                * 十字キーエミュレート設定
  1039.     cmpi.b    #$5a,d3
  1040.     beq    PS_JOGCON_E
  1041.     cmpi.l    #PS_SND_NORMAL_000,JOY_SND_BUF(a0)
  1042.     bne    PS_JOGCON_E
  1043.     bsr    SET_PS_MOTOR_SND            * PSモーターコマンド送信パラメータ設定
  1044. PS_JOGCON_E:
  1045.     bra    IOCS3B_SET
  1046.  
  1047. PS_UNKNOWPAD:
  1048.     st.b    JOY_PS_MOTOR_STS(a0)            * モータータイプ = デュアルショック
  1049.     bra    IOCS3B_SET
  1050.  
  1051. PS_RESERVE:
  1052.     move.l    d2,JOY_PAD_TYPE(a0)
  1053.     move.w    #$ffff,JOY_D_DATA(a0)            * デジタルデータ
  1054.     clr.b    JOY_ANALOG_FLG+1(a0)            * アナログ読み込み無し
  1055.     move.b    #$80,JOY_LUD_DATA(a0)            * 左・上下
  1056.     move.b    #$80,JOY_LLR_DATA(a0)            * 左・左右
  1057.     move.b    #$80,JOY_RUD_DATA(a0)            * 右・上下
  1058.     move.b    #$80,JOY_RLR_DATA(a0)            * 右・左右
  1059.     clr.b    JOY_BTN1_DATA(a0)            * ボタン1
  1060.     clr.b    JOY_BTN2_DATA(a0)            * ボタン2
  1061.     clr.b    JOY_BTN3_DATA(a0)            * ボタン3
  1062.     clr.b    JOY_BTN4_DATA(a0)            * ボタン4
  1063.     bra    IOCS3B_SET
  1064.  
  1065. PS_DIGITAL_SET:
  1066.     move.b    (a3)+,d4
  1067.     lsl.w    #8,d4
  1068.     move.b    (a3)+,d4
  1069.     moveq.l    #$ff,d0
  1070.     lea.l    PSCNV_DATA(pc),a4
  1071.     moveq.l    #15,d5
  1072. PS_DIGITAL_SET_1:
  1073.     btst.l    d5,d4
  1074.     bne    PS_DIGITAL_SET_2
  1075.     and.w    (a4),d0
  1076. PS_DIGITAL_SET_2:
  1077.     addq.w    #2,a4
  1078.     dbra    d5,PS_DIGITAL_SET_1
  1079.     move.w    d0,JOY_D_DATA(a0)            * デジタルデータ
  1080.     bsr    LENSHA_MODE
  1081.     bsr    BIT_CNV_MODE                * ビット変換
  1082.     rts
  1083.  
  1084. PSCNV_DATA:
  1085.     .dc.w    $fffb                    * 左変換データ
  1086.     .dc.w    $fffd                    * 下変換データ
  1087.     .dc.w    $fff7                    * 右変換データ
  1088.     .dc.w    $fffe                    * 上変換データ
  1089.     .dc.w    $ff7f                    * スタート変換データ
  1090.     .dc.w    $dfff                    * 右アナログスティックボタン変換データ
  1091.     .dc.w    $bfff                    * 左アナログスティックボタン変換データ
  1092.     .dc.w    $7fff                    * セレクト変換データ
  1093.     .dc.w    $fbff                    * □変換データ
  1094.     .dc.w    $ffbf                    * ×変換データ
  1095.     .dc.w    $ffef                    * ○変換データ
  1096.     .dc.w    $fdff                    * △変換データ
  1097.     .dc.w    $feff                    * R1変換データ
  1098.     .dc.w    $f7ff                    * L1変換データ
  1099.     .dc.w    $ffdf                    * R2変換データ
  1100.     .dc.w    $efff                    * L2変換データ
  1101.  
  1102. *
  1103. * 1バイトコマンド転送 & データ取得(コントローラ専用)
  1104. *
  1105. * IN    D4.B =    コマンド
  1106. *    A1.L =    $e9a001
  1107. *    A2.L =    $e9a007
  1108. *
  1109. * OUT    D0.L =    破壊
  1110. *    D4.B =    データ
  1111. *    D5.w =    破壊
  1112. *    D6.L =    破壊
  1113. PS_IF_PAD:
  1114.     moveq.l    #7,d6                    * CLKカウンタ
  1115.     not.b    d4                    * CMD反転
  1116.     lsr.b    #1,d4                    * XフラグにCMD
  1117.     move.w    sr,d5                    * SRレジスタ保持
  1118.     ori.w    #$0700,sr                * 割り込み禁止
  1119. PS_IF_PAD_1:
  1120.     moveq.l    #7,d0
  1121.     roxl.b    #1,d0
  1122.     move.b    d0,(a2)                    * CMD書き込み
  1123.     move.b    #$d,(a2)                * CLK = 0
  1124.     moveq.l    #5,d0                    * WAIT TIME
  1125.     bsr    JOY_WAIT                * WAIT
  1126.     move.b    #$c,(a2)                * CLK = 1
  1127.     moveq.l    #4,d0                    * WAIT TIME
  1128.     bsr    JOY_WAIT                * WAIT
  1129.     move.b    (a1),d0                    * DAT読み込み
  1130.     lsr.b    #1,d0                    * XフラグにDAT
  1131.     roxr.b    #1,d4                    * d4にDATをセットして、XフラグにCMD
  1132.     dbra    d6,PS_IF_PAD_1
  1133.     move.b    #$e,(a2)                * CMD = 1
  1134.     move.w    d5,sr                    * SRレジスタ復帰
  1135.     moveq.l    #4,d0                    * WAIT TIME
  1136.     bsr    JOY_WAIT                * WAIT
  1137.     rts
  1138.  
  1139. JOY_WAIT:
  1140.     add.w    COM_DATA+COM_WAIT_HOSEI(pc),d0        * WAIT補正値加算
  1141. JOY_WAIT_1:
  1142.     tst.b    (a1)                    * WAIT
  1143.     dbra    d0,JOY_WAIT_1
  1144.     rts
  1145.  
  1146. SET_PS_MOTOR_SND:
  1147.     move.l    #PS_SND_MOTOR1_000,JOY_SND_BUF(a0)
  1148.     clr.b    JOY_PS_MOTOR_STS(a0)
  1149.     rts
  1150.  
  1151. MD_MTAP_ERROR1:
  1152.     moveq.l    #2,d0                    * JOYSTICK PORT 1
  1153.     bra    ATARI68_1
  1154.  
  1155. MD_MTAP:
  1156.     move.w    COM_DATA+COM_JOY1_MAX(pc),d2
  1157.     cmpi.w    #4,d2
  1158.     ble    MD_MTAP_1
  1159.     moveq.l    #4,d2
  1160. MD_MTAP_1:
  1161.     cmp.w    d2,d1
  1162.     beq    MD_MTAP_ERROR1
  1163.     bgt    IOCS3B_ERROR                * ジョイスティック番号が範囲外か?
  1164.     move.l    #PAD_TYPE_MD*65536+PAD_TYPE_MTAP,d6    * パッドタイプ = メガドライブ + マルチタップ
  1165.     move.w    d1,d0
  1166.     lsl.w    #8,d0
  1167.     lea.l    JOY_DATA(pc),a0
  1168.     adda.w    d0,a0                    * 対象JOY番号のデータ領域
  1169.     move.l    a0,COM_DATA+COM_OUT_JOYBUF        * 出力バッファ
  1170.     cmpi.w    #1,COM_DATA+COM_HANTEI_MODE
  1171.     beq    MD_MTAP_2                * キャッシュ無し指定か
  1172.     cmpi.w    #PAD_TYPE_MD,JOY_CACHE_STS(a0)
  1173.     beq    MD_MTAP_7                * メガドラでキャッシュされているデータがあるか
  1174. MD_MTAP_2:
  1175.     move.b    #8,(a2)                    * PC4 = 0
  1176.     lea.l    COM_DATA+COM_RCV_BUF(pc),a3        * 受信バッファ
  1177.     moveq.l    #$ff,d2                    * 読み込みデータ無し
  1178.     moveq.l    #7-1,d6                    * 初期データ読み込み回数
  1179. MD_MTAP_3:
  1180.     bsr    MD_GET_DATA                * 1-3:DUMMY,4-7:PORT A-D
  1181.     move.b    d2,(a3)+                * データ格納
  1182.     dbra    d6,MD_MTAP_3
  1183.     lea.l    JOY_DATA(pc),a0
  1184.     lea.l    COM_DATA+COM_RCV_BUF+3(pc),a4        * コントローラタイプ格納領域
  1185.     move.w    d1,d3                    * 接続可能コントローラ数-1
  1186. MD_MTAP_4:
  1187.     lea.l    MD_DATA_SIZE(pc),a3
  1188.     moveq.l    #0,d5
  1189.     move.b    (a4)+,d5                * コントローラタイプ取得
  1190.     move.b    0(a3,d5.w),d6                * PORT DATA SIZE
  1191.     bmi    MD_MTAP_6
  1192.     lea.l    COM_DATA+COM_RCV_BUF+7(pc),a3        * 受信バッファ
  1193. MD_MTAP_5:
  1194.     bsr    MD_GET_DATA                * GET DATA
  1195.     move.b    d2,(a3)+                * データ格納
  1196.     dbra    d6,MD_MTAP_5
  1197. MD_MTAP_6:
  1198.     lea.l    COM_DATA+COM_RCV_BUF+7(pc),a3        * 受信バッファ
  1199.     move.l    #PAD_TYPE_MD*65536+PAD_TYPE_MTAP,JOY_PAD_TYPE(a0)
  1200.                             * パッドタイプ = メガドライブ + マルチタップ
  1201.     move.b    d5,JOY_PAD_TYPE+3(a0)
  1202.     move.w    #PAD_TYPE_MD,JOY_CACHE_STS(a0)        * キャッシュあり
  1203.     clr.w    JOY_PORT_NO(a0)                * ポート番号設定(PORT1)
  1204.     move.w    d5,d0                    * コントローラタイプ取得
  1205.     add.w    d0,d0                    * 2倍
  1206.     move.w    MD_PADTYPE(pc,d0.w),d0
  1207.     jsr    MD_PADTYPE(pc,d0.w)            * タイプ別処理に飛ぶ
  1208.     lea.l    DATA_SIZE(a0),a0            * 次のJOY番号のデータ領域
  1209.     dbra    d3,MD_MTAP_4
  1210.     move.b    #14,(a2)                * PC7 = 0
  1211.     move.b    #9,(a2)                    * PC4 = 1
  1212. MD_MTAP_7:
  1213.     movea.l    COM_DATA+COM_OUT_JOYBUF(pc),a0
  1214.     move.w    #$ffff,JOY_CACHE_STS(a0)        * キャッシュ無し
  1215.     bra    IOCS3B_SET
  1216.  
  1217. MD_PADTYPE:
  1218.     .dc.w    MD_3BUTTON-MD_PADTYPE            * 3ボタン
  1219.     .dc.w    MD_6BUTTON-MD_PADTYPE            * 6ボタン
  1220.     .dc.w    MD_MOUSE-MD_PADTYPE            * マウス
  1221.     .dc.w    MD_RESERVE-MD_PADTYPE            * ?
  1222.     .dc.w    MD_RESERVE-MD_PADTYPE            * ?
  1223.     .dc.w    MD_RESERVE-MD_PADTYPE            * ?
  1224.     .dc.w    MD_RESERVE-MD_PADTYPE            * ?
  1225.     .dc.w    MD_RESERVE-MD_PADTYPE            * ?
  1226.     .dc.w    MD_RESERVE-MD_PADTYPE            * ?
  1227.     .dc.w    MD_RESERVE-MD_PADTYPE            * ?
  1228.     .dc.w    MD_RESERVE-MD_PADTYPE            * ?
  1229.     .dc.w    MD_RESERVE-MD_PADTYPE            * ?
  1230.     .dc.w    MD_RESERVE-MD_PADTYPE            * ?
  1231.     .dc.w    MD_RESERVE-MD_PADTYPE            * ?
  1232.     .dc.w    MD_RESERVE-MD_PADTYPE            * ?
  1233.     .dc.w    MD_NOPAD-MD_PADTYPE            * 未接続
  1234.  
  1235. MD_3BUTTON:
  1236.     moveq.l    #$ff,d0
  1237.     move.b    (a3)+,d0
  1238.     move.b    (a3),d6
  1239.     lsl.b    #4,d6
  1240.     or.b    d6,d0
  1241.     move.w    d0,JOY_D_DATA(a0)            * デジタルデータ
  1242.     clr.b    JOY_ANALOG_FLG+1(a0)            * アナログ読み込み無し
  1243.     move.b    #$80,JOY_LUD_DATA(a0)            * 左・上下
  1244.     move.b    #$80,JOY_LLR_DATA(a0)            * 左・左右
  1245.     move.b    #$80,JOY_RUD_DATA(a0)            * 右・上下
  1246.     move.b    #$80,JOY_RLR_DATA(a0)            * 右・左右
  1247.     clr.b    JOY_BTN1_DATA(a0)            * ボタン1
  1248.     clr.b    JOY_BTN2_DATA(a0)            * ボタン2
  1249.     clr.b    JOY_BTN3_DATA(a0)            * ボタン3
  1250.     clr.b    JOY_BTN4_DATA(a0)            * ボタン4
  1251.     bsr    LENSHA_MODE
  1252.     bsr    BIT_CNV_MODE
  1253.     rts
  1254.  
  1255. MD_6BUTTON:
  1256.     moveq.l    #$ff,d0
  1257.     move.b    (a3)+,d5
  1258.     move.b    (a3)+,d6
  1259.     move.b    (a3),d0
  1260.     ori.b    #$f0,d0
  1261.     lsl.w    #8,d0
  1262.     lsl.b    #4,d6
  1263.     or.b    d6,d5
  1264.     move.b    d5,d0
  1265.     btst.l    #11,d0
  1266.     bne    MD_6BUTTON_1
  1267.     andi.w    #$7fff,d0
  1268. MD_6BUTTON_1:
  1269.     move.w    d0,JOY_D_DATA(a0)            * デジタルデータ
  1270.     clr.b    JOY_ANALOG_FLG+1(a0)            * アナログ読み込み無し
  1271.     move.b    #$80,JOY_LUD_DATA(a0)            * 左・上下
  1272.     move.b    #$80,JOY_LLR_DATA(a0)            * 左・左右
  1273.     move.b    #$80,JOY_RUD_DATA(a0)            * 右・上下
  1274.     move.b    #$80,JOY_RLR_DATA(a0)            * 右・左右
  1275.     clr.b    JOY_BTN1_DATA(a0)            * ボタン1
  1276.     clr.b    JOY_BTN2_DATA(a0)            * ボタン2
  1277.     clr.b    JOY_BTN3_DATA(a0)            * ボタン3
  1278.     clr.b    JOY_BTN4_DATA(a0)            * ボタン4
  1279.     bsr    LENSHA_MODE
  1280.     bsr    BIT_CNV_MODE
  1281.     rts
  1282.  
  1283. MD_MOUSE:
  1284. MD_RESERVE:
  1285. MD_NOPAD:
  1286.     move.w    #$ffff,JOY_D_DATA(a0)            * デジタルデータ
  1287.     clr.b    JOY_ANALOG_FLG+1(a0)            * アナログ読み込み無し
  1288.     move.b    #$80,JOY_LUD_DATA(a0)            * 左・上下
  1289.     move.b    #$80,JOY_LLR_DATA(a0)            * 左・左右
  1290.     move.b    #$80,JOY_RUD_DATA(a0)            * 右・上下
  1291.     move.b    #$80,JOY_RLR_DATA(a0)            * 右・左右
  1292.     clr.b    JOY_BTN1_DATA(a0)            * ボタン1
  1293.     clr.b    JOY_BTN2_DATA(a0)            * ボタン2
  1294.     clr.b    JOY_BTN3_DATA(a0)            * ボタン3
  1295.     clr.b    JOY_BTN4_DATA(a0)            * ボタン4
  1296.     rts
  1297.  
  1298. MD_GET_DATA:
  1299.     tst.w    d2
  1300.     bpl    MD_GET_DATA_3
  1301.     move.b    #14,(a2)                * PC7 = 0
  1302.     moveq.l    #$7f,d0
  1303.     moveq.l    #$0f,d4
  1304. MD_GET_DATA_1:
  1305.     btst.b    #5,(a1)                    * PA5 == 1 ?
  1306.     dbne    d0,MD_GET_DATA_1
  1307.     beq    MD_MTAP_ERROR2                * 接続エラー
  1308.     and.b    (a1),d4                    * GET_DATA
  1309.     move.b    #15,(a2)                * PC7 = 1
  1310.     moveq.l    #$7f,d0
  1311.     move.w    #$ff0f,d2
  1312. MD_GET_DATA_2:
  1313.     btst.b    #5,(a1)                    * PA5 == 0 ?
  1314.     dbeq    d0,MD_GET_DATA_2
  1315.     bne    MD_MTAP_ERROR2                * 接続エラー
  1316.     and.b    (a1),d2                    * GET_DATA
  1317.     swap.w    d2
  1318.     move.w    d4,d2
  1319.     rts
  1320. MD_GET_DATA_3:
  1321.     swap.w    d2
  1322.     rts
  1323.  
  1324. MD_MTAP_ERROR2:
  1325.     addq.w    #4,a7                    * rts分補正
  1326.     move.b    #14,(a2)                * PC7 = 0
  1327.     move.b    #9,(a2)                    * PC4 = 1
  1328.     bra    ATARI68                    * アタリパッドの読み込み
  1329.  
  1330. MD_DATA_SIZE:
  1331.     .dc.b    2-1                    * 3ボタン
  1332.     .dc.b    3-1                    * 6ボタン
  1333.     .dc.b    6-1                    * セガマウス
  1334.     .dc.b    0-1                    * 無し
  1335.     .dc.b    0-1                    * 無し
  1336.     .dc.b    0-1                    * 無し
  1337.     .dc.b    0-1                    * 無し
  1338.     .dc.b    0-1                    * 無し
  1339.     .dc.b    0-1                    * 無し
  1340.     .dc.b    0-1                    * 無し
  1341.     .dc.b    0-1                    * 無し
  1342.     .dc.b    0-1                    * 無し
  1343.     .dc.b    0-1                    * 無し
  1344.     .dc.b    0-1                    * 無し
  1345.     .dc.b    0-1                    * 無し
  1346.     .dc.b    0-1                    * 未接続
  1347.  
  1348. COM_DATA:
  1349.     COM_DATA_INIT                    * 共通データ
  1350. JOY_DATA:
  1351.     JOY_DATA_INIT
  1352.     JOY_DATA_INIT
  1353.     JOY_DATA_INIT
  1354.     JOY_DATA_INIT
  1355.     JOY_DATA_INIT
  1356.     JOY_DATA_INIT
  1357.     JOY_DATA_INIT
  1358.  
  1359. PS_SND_NORMAL_000:
  1360.     .dc.l    PS_SND_NORMAL_DATA000
  1361.     .dc.w    30
  1362.     .dc.l    PS_SND_NORMAL_000
  1363.  
  1364. PS_SND_NORMAL_DATA000:
  1365.     .dc.b    $42,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  1366.     .dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  1367.  
  1368. PS_SND_MOTOR1_000:
  1369.     .dc.l    PS_SND_MOTOR1_DATA000
  1370.     .dc.w    30
  1371.     .dc.l    PS_SND_MOTOR1_001
  1372.  
  1373. PS_SND_MOTOR1_001:
  1374.     .dc.l    PS_SND_MOTOR1_DATA001
  1375.     .dc.w    30
  1376.     .dc.l    PS_SND_MOTOR1_002
  1377.  
  1378. PS_SND_MOTOR1_002:
  1379.     .dc.l    PS_SND_MOTOR1_DATA002
  1380.     .dc.w    30
  1381.     .dc.l    PS_SND_MOTOR1_003
  1382.  
  1383. PS_SND_MOTOR1_003:
  1384.     .dc.l    PS_SND_MOTOR1_DATA003
  1385.     .dc.w    30
  1386.     .dc.l    PS_SND_MOTOR1_004
  1387.  
  1388. PS_SND_MOTOR1_004:
  1389.     .dc.l    PS_SND_MOTOR1_DATA004
  1390.     .dc.w    30
  1391.     .dc.l    PS_SND_MOTOR1_005
  1392.  
  1393. PS_SND_MOTOR1_005:
  1394.     .dc.l    PS_SND_MOTOR1_DATA005
  1395.     .dc.w    30
  1396.     .dc.l    PS_SND_MOTOR1_006
  1397.  
  1398. PS_SND_MOTOR1_006:
  1399.     .dc.l    PS_SND_MOTOR1_DATA006
  1400.     .dc.w    30
  1401.     .dc.l    PS_SND_MOTOR1_007
  1402.  
  1403. PS_SND_MOTOR1_007:
  1404.     .dc.l    PS_SND_MOTOR1_DATA007
  1405.     .dc.w    30
  1406.     .dc.l    PS_SND_MOTOR1_008
  1407.  
  1408. PS_SND_MOTOR1_008:
  1409.     .dc.l    PS_SND_MOTOR1_DATA008
  1410.     .dc.w    30
  1411.     .dc.l    PS_SND_MOTOR1_009
  1412.  
  1413. PS_SND_MOTOR1_009:
  1414.     .dc.l    PS_SND_MOTOR1_DATA009
  1415.     .dc.w    30
  1416.     .dc.l    PS_SND_MOTOR1_010
  1417.  
  1418. PS_SND_MOTOR1_010:
  1419.     .dc.l    PS_SND_MOTOR1_DATA010
  1420.     .dc.w    30
  1421.     .dc.l    PS_SND_MOTOR1_011
  1422.  
  1423. PS_SND_MOTOR1_011:
  1424.     .dc.l    PS_SND_MOTOR1_DATA011
  1425.     .dc.w    30
  1426.     .dc.l    PS_SND_MOTOR1_012
  1427.  
  1428. PS_SND_MOTOR1_012:
  1429.     .dc.l    PS_SND_MOTOR1_DATA012
  1430.     .dc.w    30
  1431.     .dc.l    PS_SND_MOTOR1_013
  1432.  
  1433. PS_SND_MOTOR1_013:
  1434.     .dc.l    PS_SND_MOTOR1_DATA013
  1435.     .dc.w    30
  1436.     .dc.l    PS_SND_MOTOR1_014
  1437.  
  1438. PS_SND_MOTOR1_014:
  1439.     .dc.l    PS_SND_MOTOR1_DATA014
  1440.     .dc.w    30
  1441.     .dc.l    PS_SND_MOTOR1_015
  1442.  
  1443. PS_SND_MOTOR1_015:
  1444.     .dc.l    PS_SND_MOTOR1_DATA015
  1445.     .dc.w    30
  1446.     .dc.l    PS_SND_MOTOR1_016
  1447.  
  1448. PS_SND_MOTOR1_016:
  1449.     .dc.l    PS_SND_MOTOR1_DATA016
  1450.     .dc.w    30
  1451.     .dc.l    PS_SND_NORMAL_000
  1452.  
  1453. PS_SND_MOTOR1_DATA000:
  1454.     .dc.b    $42,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  1455.     .dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  1456. PS_SND_MOTOR1_DATA001:
  1457.     .dc.b    $43,$00,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  1458.     .dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  1459. PS_SND_MOTOR1_DATA002:
  1460.     .dc.b    $45,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  1461.     .dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  1462. PS_SND_MOTOR1_DATA003:
  1463.     .dc.b    $4c,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  1464.     .dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  1465. PS_SND_MOTOR1_DATA004:
  1466.     .dc.b    $47,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  1467.     .dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  1468. PS_SND_MOTOR1_DATA005:
  1469.     .dc.b    $4c,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  1470.     .dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  1471. PS_SND_MOTOR1_DATA006:
  1472.     .dc.b    $4c,$00,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  1473.     .dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  1474. PS_SND_MOTOR1_DATA007:
  1475.     .dc.b    $45,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  1476.     .dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  1477. PS_SND_MOTOR1_DATA008:
  1478.     .dc.b    $45,$00,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  1479.     .dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  1480. PS_SND_MOTOR1_DATA009:
  1481.     .dc.b    $47,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  1482.     .dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  1483. PS_SND_MOTOR1_DATA010:
  1484.     .dc.b    $43,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  1485.     .dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  1486. PS_SND_MOTOR1_DATA011:
  1487.     .dc.b    $42,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  1488.     .dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  1489. PS_SND_MOTOR1_DATA012:
  1490.     .dc.b    $42,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  1491.     .dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  1492. PS_SND_MOTOR1_DATA013:
  1493.     .dc.b    $43,$00,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  1494.     .dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  1495. PS_SND_MOTOR1_DATA014:
  1496.     .dc.b    $4d,$00,$00,$01,$ff,$ff,$ff,$ff,$00,$00,$00,$00,$00,$00,$00,$00
  1497.     .dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  1498. PS_SND_MOTOR1_DATA015:
  1499.     .dc.b    $43,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  1500.     .dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  1501. PS_SND_MOTOR1_DATA016:
  1502.     .dc.b    $42,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  1503.     .dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  1504.  
  1505. .even
  1506. MODECNV_RTN:
  1507.     cmpi.w    #$23,d2
  1508.     bcc    MODECNV_RTN_1                * モード指定が範囲外か?
  1509.     move.w    d2,d0
  1510.     add.w    d0,d0                    * 2倍
  1511.     move.w    MODECNV_TBL(pc,d0.w),d0
  1512.     jmp    MODECNV_TBL(pc,d0.w)            * 各モード指定に飛ぶ
  1513. MODECNV_RTN_1:
  1514.     moveq.l    #$ff,d0                    * 設定値が範囲外
  1515.     rts
  1516.  
  1517. MODECNV_TBL:
  1518.     .dc.w    DRV_INITEND-MODECNV_TBL            * ドライバ初期化/終了処理
  1519.     .dc.w    JOYDRV_KEEP_STS-MODECNV_TBL        * 常駐状態取得
  1520.     .dc.w    GET_BUF_ADR-MODECNV_TBL            * 内部データアドレス取得
  1521.     .dc.w    MODECNV_RTN_1-MODECNV_TBL        * 予備
  1522.     .dc.w    MODECNV_RTN_1-MODECNV_TBL        * 予備
  1523.     .dc.w    MODECNV_RTN_1-MODECNV_TBL        * 予備
  1524.     .dc.w    MODECNV_RTN_1-MODECNV_TBL        * 予備
  1525.     .dc.w    MODECNV_RTN_1-MODECNV_TBL        * 予備
  1526.     .dc.w    ANALOG_GET-MODECNV_TBL            * アナログパッド読み込み
  1527.     .dc.w    MODECNV_RTN_1-MODECNV_TBL        * 予備
  1528.     .dc.w    MODECNV_RTN_1-MODECNV_TBL        * 予備
  1529.     .dc.w    MODECNV_RTN_1-MODECNV_TBL        * 予備
  1530.     .dc.w    MODECNV_RTN_1-MODECNV_TBL        * 予備
  1531.     .dc.w    MODECNV_RTN_1-MODECNV_TBL        * 予備
  1532.     .dc.w    MODECNV_RTN_1-MODECNV_TBL        * 予備
  1533.     .dc.w    MODECNV_RTN_1-MODECNV_TBL        * 予備
  1534.     .dc.w    MULTI_STS-MODECNV_TBL            * マルチタップ判定モード設定/取得
  1535.     .dc.w    CNVMODE_STS-MODECNV_TBL            * ビット変換モード設定/取得
  1536.     .dc.w    CNVDATA_STS-MODECNV_TBL            * ビット変換データ設定/取得
  1537.     .dc.w    OUTPUT_STS-MODECNV_TBL            * 出力モード設定/取得
  1538.     .dc.w    MODECNV_RTN_1-MODECNV_TBL        * 予備
  1539.     .dc.w    MTAP_MAX_SET-MODECNV_TBL        * マルチタップ・パッド接続数設定
  1540.     .dc.w    PLUS_EMULATION-MODECNV_TBL        * アナログスティック・エミュレート設定
  1541.     .dc.w    PEM_PNT_SET-MODECNV_TBL            * 十字キーエミュレートしきい値設定
  1542.     .dc.w    STASEL_MODE-MODECNV_TBL            * START,SELECTボタン動作モード設定/取得
  1543.     .dc.w    LENONOFF_MODE-MODECNV_TBL        * 連射モード設定/取得
  1544.     .dc.w    MODECNV_RTN_1-MODECNV_TBL        * 予備
  1545.     .dc.w    MODECNV_RTN_1-MODECNV_TBL        * 予備
  1546.     .dc.w    MODECNV_RTN_1-MODECNV_TBL        * 予備
  1547.     .dc.w    MODECNV_RTN_1-MODECNV_TBL        * 予備
  1548.     .dc.w    MODECNV_RTN_1-MODECNV_TBL        * 予備
  1549.     .dc.w    MODECNV_RTN_1-MODECNV_TBL        * 予備
  1550.     .dc.w    PS_MEMBREAD-MODECNV_TBL            * プレイステーションメモリカード読み込み
  1551.     .dc.w    PS_MEMBWRITE-MODECNV_TBL        * プレイステーションメモリカード書き込み
  1552.     .dc.w    PS_MOTOR-MODECNV_TBL            * プレイステーション振動パッド制御
  1553.  
  1554. * $00~$0F    システム関連
  1555. * $10~$1F    設定関連
  1556. * $20~$2F    特殊コール(プレイステーション関連)
  1557. * $30~$3F    特殊コール(サターン関連)
  1558.  
  1559. DRV_INITEND:
  1560.     moveq.l    #0,d0
  1561.     movea.l    #$e9a007,a0
  1562.     move.b    #$c,(a0)
  1563.     move.b    #$e,(a0)
  1564.     tst.w    d3
  1565.     bne    DRV_INITEND_10
  1566.     move.b    #$9,(a0)
  1567.     move.b    #$b,(a0)
  1568.     cmpi.b    #3,$cbc.w
  1569.     bls    DRV_INITEND_1
  1570.     moveq.l    #2,d0
  1571. DRV_INITEND_1:
  1572.     move.w    d0,COM_DATA+COM_WAIT_HOSEI
  1573.     moveq.l    #0,d0
  1574.     rts
  1575. DRV_INITEND_10:
  1576.     move.b    #$8,(a0)
  1577.     move.b    #$a,(a0)
  1578.     rts
  1579.  
  1580. JOYDRV_KEEP_STS:
  1581.     lea.l    KEEP_CHK_NAME(pc),a0
  1582.     move.l    a0,d0                    * JOYDRVは常駐している
  1583.     rts
  1584.  
  1585. GET_BUF_ADR:
  1586.     tst.w    d3
  1587.     bmi    GET_BUF_ADR_2
  1588.     cmpi.w    #JOY_MAX,d3
  1589.     bcc    GET_BUF_ADR_1                * ジョイスティック番号が範囲外か?
  1590.     move.w    d3,d0
  1591.     lsl.w    #8,d0
  1592.     lea.l    JOY_DATA(pc),a1
  1593.     adda.w    d0,a1
  1594.     moveq.l    #0,d0
  1595.     rts
  1596. GET_BUF_ADR_1:
  1597.     moveq.l    #$fe,d0                    * ジョイスティック番号が範囲外
  1598.     rts
  1599. GET_BUF_ADR_2:
  1600.     lea.l    COM_DATA(pc),a1
  1601.     moveq.l    #0,d0
  1602.     rts
  1603.  
  1604. MULTI_STS:
  1605.     tst.w    d3
  1606.     bmi    MULTI_STS_1                * 状態取得か?
  1607.     cmpi.w    #3,d3
  1608.     bcc    MULTI_STS_2                * 設定値が範囲外か?
  1609.     lea.l    COM_DATA+COM_HANTEI_MODE(pc),a0
  1610.     move.w    d3,(a0)                    * マルチタップ判定モード設定
  1611.     moveq.l    #0,d0                    * 正常終了
  1612.     rts
  1613. MULTI_STS_1:
  1614.     move.w    COM_DATA+COM_HANTEI_MODE(pc),d0        * マルチタップ判定モード取得
  1615.     rts
  1616. MULTI_STS_2:
  1617.     moveq.l    #$ff,d0                    * 設定値が範囲外
  1618.     rts
  1619.  
  1620. CNVMODE_STS:
  1621.     cmpi.w    #JOY_MAX,d4
  1622.     bcc    CNVMODE_STS_1                * ジョイスティック番号が範囲外か?
  1623.     move.w    d4,d0
  1624.     lsl.w    #8,d0
  1625.     lea.l    JOY_DATA+JOY_CNV_MODE(pc),a0
  1626.     adda.w    d0,a0
  1627.     tst.w    d3
  1628.     bmi    CNVMODE_STS_2                * 状態取得か?
  1629.     cmpi.w    #2,d3
  1630.     bcc    CNVMODE_STS_3                * 設定値が範囲外か?
  1631.     move.w    d3,(a0)                    * ビット変換モード設定
  1632.     moveq.l    #0,d0                    * 正常終了
  1633.     rts
  1634. CNVMODE_STS_1:
  1635.     moveq.l    #$fe,d0                    * ジョイスティック番号が範囲外
  1636.     rts
  1637. CNVMODE_STS_2:
  1638.     move.w    (a0),d0                    * ビット変換モード取得
  1639.     rts
  1640. CNVMODE_STS_3:
  1641.     moveq.l    #$ff,d0                    * 設定値が範囲外
  1642.     rts
  1643.  
  1644. CNVDATA_STS:
  1645.     cmpi.w    #JOY_MAX,d4
  1646.     bcc    CNVDATA_STS_2                * ジョイスティック番号が範囲外か?
  1647.     move.l    a1,-(a7)                * レジスタ保存
  1648.     move.w    d4,d0
  1649.     lsl.w    #8,d0
  1650.     lea.l    JOY_DATA+JOY_CNV_DATA(pc),a0
  1651.     adda.w    d0,a0
  1652.     moveq.l    #32-1,d0
  1653.     tst.w    d3
  1654.     bpl    CNVDATA_STS_1                * 状態取得か?
  1655.     exg.l    a1,a0
  1656. CNVDATA_STS_1:
  1657.     move.b    (a1)+,(a0)+
  1658.     dbra    d0,CNVDATA_STS_1
  1659.     movea.l    (a7)+,a1                * レジスタ復帰
  1660.     moveq.l    #0,d0                    * 正常終了
  1661.     rts
  1662. CNVDATA_STS_2:
  1663.     moveq.l    #$fe,d0                    * ジョイスティック番号が範囲外
  1664.     rts
  1665.  
  1666. OUTPUT_STS:
  1667.     tst.w    d3
  1668.     bmi    OUTPUT_STS_1                * 状態取得か?
  1669.     cmpi.w    #2,d3
  1670.     bcc    OUTPUT_STS_2                * 設定値が範囲外か?
  1671.     lea.l    COM_DATA+COM_IOCS3B_OUT(pc),a0
  1672.     move.w    d3,(a0)                    * 出力モード設定
  1673.     moveq.l    #0,d0                    * 正常終了
  1674.     rts
  1675. OUTPUT_STS_1:
  1676.     move.w    COM_DATA+COM_IOCS3B_OUT(pc),d0        * 出力モード取得
  1677.     rts
  1678. OUTPUT_STS_2:
  1679.     moveq.l    #$ff,d0                    * 設定値が範囲外
  1680.     rts
  1681.  
  1682. MTAP_MAX_SET:
  1683.     tst.w    d3
  1684.     bmi    MTAP_MAX_SET_2                * 状態取得か?
  1685.     move.w    d3,d0
  1686.     cmpi.w    #JOY_MAX-1,d0                * タップ数がドライバの管理する範囲外か?
  1687.     bls    MTAP_MAX_SET_1
  1688.     moveq.l    #JOY_MAX-1,d0
  1689. MTAP_MAX_SET_1:
  1690.     lea.l    COM_DATA+COM_JOY1_MAX(pc),a0
  1691.     move.w    d0,(a0)                    * パッド数設定
  1692.     moveq.l    #0,d0                    * 正常終了
  1693.     rts
  1694. MTAP_MAX_SET_2:
  1695.     move.w    COM_DATA+COM_JOY1_MAX(pc),d0        * パッド数取得
  1696.     rts
  1697.  
  1698. PLUS_EMULATION:
  1699.     cmpi.w    #JOY_MAX,d4
  1700.     bcc    PLUS_EMULATION_2            * ジョイスティック番号が範囲外か?
  1701.     move.w    d4,d0
  1702.     lsl.w    #8,d0
  1703.     lea.l    JOY_DATA+JOY_PLUS_EMU(pc),a0
  1704.     adda.w    d0,a0
  1705.     tst.w    d3
  1706.     bmi    PLUS_EMULATION_1            * 状態取得か?
  1707.     move.w    d3,(a0)                    * エミュレート設定
  1708.     moveq.l    #0,d0                    * 正常終了
  1709.     rts
  1710. PLUS_EMULATION_1:
  1711.     move.w    (a0),d0                    * エミュレート設定取得
  1712.     rts
  1713. PLUS_EMULATION_2:
  1714.     moveq.l    #$fe,d0                    * ジョイスティック番号が範囲外
  1715.     rts
  1716.  
  1717. STASEL_MODE:
  1718.     cmpi.w    #JOY_MAX,d4
  1719.     bcc    STASEL_MODE_2                * ジョイスティック番号が範囲外か?
  1720.     move.w    d4,d0
  1721.     lsl.w    #8,d0
  1722.     lea.l    JOY_DATA+JOY_STASEL_MODE(pc),a0
  1723.     adda.w    d0,a0
  1724.     tst.w    d3
  1725.     bmi    STASEL_MODE_1                * 状態取得か?
  1726.     cmpi.w    #2,d3
  1727.     bcc    STASEL_MODE_3                * 設定値が範囲外か?
  1728.     move.w    d3,(a0)                    * START,SELECTボタン動作モード設定
  1729.     moveq.l    #0,d0                    * 正常終了
  1730.     rts
  1731. STASEL_MODE_1:
  1732.     move.w    (a0),d0                    * START,SELECTボタン動作モード取得
  1733.     rts
  1734. STASEL_MODE_2:
  1735.     moveq.l    #$fe,d0                    * ジョイスティック番号が範囲外
  1736.     rts
  1737. STASEL_MODE_3:
  1738.     moveq.l    #$ff,d0                    * 設定値が範囲外
  1739.     rts
  1740.  
  1741. LENONOFF_MODE:
  1742.     cmpi.w    #JOY_MAX,d4
  1743.     bcc    LENONOFF_MODE_2                * ジョイスティック番号が範囲外か?
  1744.     cmpi.w    #16,d5
  1745.     bcc    LENONOFF_MODE_3                * ビット番号が範囲外か?
  1746.     move.w    d4,d0
  1747.     lsl.w    #8,d0
  1748.     add.w    d5,d0
  1749.     add.w    d5,d0
  1750.     lea.l    JOY_DATA(pc),a0
  1751.     adda.w    d0,a0
  1752.     tst.l    d3
  1753.     bmi    LENONOFF_MODE_1                * 状態取得か?
  1754.     move.w    d3,JOY_ONOFF_SU(a0)            * ON/OFF数設定
  1755.     move.w    d3,JOY_ONOFF_CNT(a0)            * ON/OFF数設定
  1756.     moveq.l    #0,d0                    * 正常終了
  1757.     rts
  1758. LENONOFF_MODE_1:
  1759.     move.w    JOY_ONOFF_SU(a0),d0            * ON/OFF数取得
  1760.     rts
  1761. LENONOFF_MODE_2:
  1762.     moveq.l    #$fe,d0                    * ジョイスティック番号が範囲外
  1763.     rts
  1764. LENONOFF_MODE_3:
  1765.     moveq.l    #$f8,d0                    * ビット番号が範囲外
  1766.     rts
  1767.  
  1768. PEM_PNT_SET:
  1769.     cmpi.w    #JOY_MAX,d4
  1770.     bcc    PEM_PNT_SET_3                * ジョイスティック番号が範囲外か?
  1771.     move.w    d4,d0
  1772.     lsl.w    #8,d0
  1773.     lea.l    JOY_DATA+JOY_PLUS_EMU+2(pc),a0
  1774.     adda.w    d0,a0
  1775.     tst.w    d3
  1776.     bmi    PEM_PNT_SET_1                * 状態取得か?
  1777.     cmpi.w    #$7f,d3
  1778.     bhi    PEM_PNT_SET_2                * 設定値が範囲外か?
  1779.     move.w    d3,(a0)                    * エミュレートしきい値設定
  1780.     moveq.l    #0,d0                    * 正常終了
  1781.     rts
  1782. PEM_PNT_SET_1:
  1783.     move.w    (a0),d0                    * エミュレートしきい値取得
  1784.     rts
  1785. PEM_PNT_SET_2:
  1786.     moveq.l    #$ff,d0                    * 設定値が範囲外
  1787.     rts
  1788. PEM_PNT_SET_3:
  1789.     moveq.l    #$fe,d0                    * ジョイスティック番号が範囲外
  1790.     rts
  1791.  
  1792. PS_MEMBREAD:
  1793.     movem.l    d1-d7/a1-a2,-(a7)            * レジスタ保存
  1794.     movea.l    a1,a0
  1795.     lea.l    $e9a001,a1                * ジョイスティックI/Oアドレス
  1796.     lea.l    6(a1),a2                * ジョイスティックI/Oアドレス
  1797.     bsr    CHECK_PSCABLE
  1798.     tst.b    d0
  1799.     bmi    PS_MEMBREAD_10
  1800. PS_MEMBREAD_1:
  1801.     bsr    PS_MEMFREAD                * 1フレーム読み込み
  1802.     tst.l    d0
  1803.     bmi    PS_MEMBREAD_2                * $fb .. メモリカード未接続  $fa .. 読み込みエラー
  1804.     move.w    #100,d0                    * WAIT TIME
  1805.     bsr    JOY_WAIT                * WAIT
  1806.     addq.w    #1,d4
  1807.     dbra    d5,PS_MEMBREAD_1
  1808.     moveq.l    #0,d0
  1809. PS_MEMBREAD_2:
  1810.     movem.l    (a7)+,d1-d7/a1-a2            * レジスタ復帰
  1811.     rts
  1812.  
  1813. PS_MEMBREAD_10:
  1814.     moveq.l    #$fc,d0                    * PSケーブルが接続されていない
  1815.     bra    PS_MEMBREAD_2
  1816.  
  1817. PS_MEMFREAD:
  1818.     move.b    #8,(a2)                    * PC4 = 0
  1819.     moveq.l    #$2f,d0                    * WAIT TIME
  1820.     bsr    JOY_WAIT                * WAIT
  1821.     move.w    d3,d1
  1822.     addi.w    #$0081,d1                * 読み込みメモリカード位置指定
  1823.     bsr    PS_IF_MMR                * 通信
  1824.     moveq.l    #$52,d1                    * CMD 52
  1825.     bsr    PS_IF_MMR                * 通信
  1826.     moveq.l    #$00,d1                    * CMD 00
  1827.     bsr    PS_IF_MMR                * 通信
  1828.     cmpi.b    #$5a,d0
  1829.     bne    PS_MEMFREAD_10
  1830.     moveq.l    #$00,d1                    * CMD 00
  1831.     bsr    PS_IF_MMR                * 通信
  1832.     move.w    d4,d1
  1833.     lsr.w    #8,d1                    * アドレス上位
  1834.     bsr    PS_IF_MMR                * 通信
  1835.     move.b    d4,d1                    * アドレス下位
  1836.     bsr    PS_IF_MMR                * 通信
  1837.     moveq.l    #$00,d1                    * CMD 00
  1838.     bsr    PS_IF_MMR                * 通信
  1839.     moveq.l    #$00,d1                    * CMD 00
  1840.     bsr    PS_IF_MMR                * 通信
  1841.     moveq.l    #$00,d1                    * CMD 00
  1842.     bsr    PS_IF_MMR                * 通信
  1843.     move.b    d0,d7
  1844.     moveq.l    #$00,d1                    * CMD 00
  1845.     bsr    PS_IF_MMR                * 通信
  1846.     eor.b    d0,d7
  1847.     move.l    d5,-(a7)                * レジスタ保存
  1848.     moveq.l    #$7f,d5                    * 1フレームバイト数-1
  1849. PS_MEMFREAD_1:
  1850.     moveq.l    #$00,d1                    * CMD 00
  1851.     bsr    PS_IF_MMR                * 通信
  1852.     move.b    d0,(a0)+
  1853.     eor.b    d0,d7
  1854.     dbra    d5,PS_MEMFREAD_1
  1855.     move.l    (a7)+,d5                * レジスタ復帰
  1856.     moveq.l    #$00,d1                    * CMD 00
  1857.     bsr    PS_IF_MMR                * 通信
  1858.     eor.b    d0,d7
  1859.     moveq.l    #$00,d1                    * CMD 00
  1860.     bsr    PS_IF_MMR                * 通信
  1861.     tst.b    d7
  1862.     bne    PS_MEMFREAD_11
  1863.     moveq.l    #0,d0                    * 正常終了
  1864. PS_MEMFREAD_2:
  1865.     move.b    #9,(a2)                    * PC4 = 1
  1866.     rts
  1867.  
  1868. PS_MEMFREAD_10:
  1869.     moveq.l    #$fb,d0                    * メモリカード未接続
  1870.     bra    PS_MEMFREAD_2
  1871.  
  1872. PS_MEMFREAD_11:
  1873.     moveq.l    #$fa,d0                    * 読み込みエラー
  1874.     bra    PS_MEMFREAD_2
  1875.  
  1876. *
  1877. * 1バイトコマンド転送 & データ取得
  1878. *
  1879. * IN    D1.B =    コマンド
  1880. *    D6.W =  WAIT TIME
  1881. *    A0.L =    $e9a001
  1882. *    A2.L =    $e9a007
  1883. *
  1884. * OUT    D0.B =    データ
  1885. *    D1.L =    破壊
  1886. *    D2.L =    破壊
  1887. PS_IF_MMR:
  1888.     moveq.l    #7,d2                    * CLKカウンタ
  1889.     not.b    d1                    * CMD反転
  1890.     lsr.b    #1,d1                    * XフラグにCMD
  1891.     move.w    sr,-(a7)
  1892.     ori.w    #$0700,sr                * 割り込み禁止
  1893. PS_IF_MMR_1:
  1894.     moveq.l    #7,d0
  1895.     roxl.b    #1,d0
  1896.     move.b    #$d,(a2)                * CLK = 0
  1897.     move.b    d0,(a2)                    * CMD書き込み
  1898.     moveq.l    #$2f,d0                    * WAIT TIME
  1899.     bsr    JOY_WAIT                * WAIT
  1900.     move.b    #$c,(a2)                * CLK = 1
  1901.     moveq.l    #$2f,d0                    * WAIT TIME
  1902.     bsr    JOY_WAIT                * WAIT
  1903.     move.b    (a1),d0                    * DAT読み込み
  1904.     lsr.b    #1,d0                    * XフラグにDAT
  1905.     roxr.b    #1,d1                    * d1にDATをセットして、XフラグにCMD
  1906.     dbra    d2,PS_IF_MMR_1
  1907.     move.b    #$e,(a2)                * CMD = 1
  1908.     move.w    (a7)+,sr
  1909.     moveq.l    #$2f,d0                    * WAIT TIME
  1910.     bsr    JOY_WAIT                * WAIT
  1911.     move.b    d1,d0
  1912.     rts
  1913.  
  1914. CHECK_PSCABLE:
  1915.     move.b    #9,(a2)                    * ON
  1916.     tst.b    (a1)
  1917.     move.b    (a1),d0
  1918.     andi.b    #$0f,d0
  1919.     cmpi.b    #2,d0
  1920.     sne    d0
  1921.     rts
  1922.  
  1923. PS_MEMBWRITE:
  1924.     movem.l    d1-d7/a1-a2,-(a7)            * レジスタ保存
  1925.     movea.l    a1,a0
  1926.     lea.l    $e9a001,a1                * ジョイスティックI/Oアドレス
  1927.     lea.l    6(a1),a2                * ジョイスティックI/Oアドレス
  1928.     bsr    CHECK_PSCABLE
  1929.     tst.b    d0
  1930.     bmi    PS_MEMBWRITE_10
  1931. PS_MEMBWRITE_1:
  1932.     bsr    PS_MEMFWRITE                * 1フレーム書き込み
  1933.     tst.l    d0
  1934.     bmi    PS_MEMBWRITE_2                * $fb .. メモリカード未接続  $f9 .. 書き込みエラー
  1935.     move.w    #8900,d0                * WAIT TIME
  1936.     bsr    JOY_WAIT                * WAIT
  1937.     addq.w    #1,d4
  1938.     dbra    d5,PS_MEMBWRITE_1
  1939.     moveq.l    #0,d0
  1940. PS_MEMBWRITE_2:
  1941.     movem.l    (a7)+,d1-d7/a1-a2            * レジスタ復帰
  1942.     rts
  1943.  
  1944. PS_MEMBWRITE_10:
  1945.     moveq.l    #$fc,d0                    * PSケーブルが接続されていない
  1946.     bra    PS_MEMBWRITE_2
  1947.  
  1948. PS_MEMFWRITE:
  1949.     move.b    #8,(a2)                    * PC4 = 0
  1950.     moveq.l    #$3f,d0                    * WAIT TIME
  1951.     bsr    JOY_WAIT                * WAIT
  1952.     move.w    d3,d1
  1953.     addi.w    #$0081,d1                * 書き込みメモリカード位置指定
  1954.     bsr    PS_IF_MMW                * 通信
  1955.     moveq.l    #$57,d1                    * CMD 57
  1956.     bsr    PS_IF_MMW                * 通信
  1957.     moveq.l    #$00,d1                    * CMD 00
  1958.     bsr    PS_IF_MMW                * 通信
  1959.     cmpi.b    #$5a,d0
  1960.     bne    PS_MEMFWRITE_10
  1961.     moveq.l    #$00,d1                    * CMD 00
  1962.     bsr    PS_IF_MMW                * 通信
  1963.     move.w    d4,d1
  1964.     lsr.w    #8,d1                    * アドレス上位
  1965.     move.b    d1,d7
  1966.     bsr    PS_IF_MMW                * 通信
  1967.     move.b    d4,d1                    * アドレス下位
  1968.     eor.b    d1,d7
  1969.     bsr    PS_IF_MMW                * 通信
  1970.     move.l    d5,-(a7)                * レジスタ保存
  1971.     moveq.l    #$7f,d5                    * 1フレームバイト数-1
  1972. PS_MEMFWRITE_1:
  1973.     move.b    (a0)+,d1                * 書き込みデータ
  1974.     eor.b    d1,d7
  1975.     bsr    PS_IF_MMW                * 通信
  1976.     dbra    d5,PS_MEMFWRITE_1
  1977.     move.l    (a7)+,d5                * レジスタ復帰
  1978.     move.b    d7,d1                    * XORフラグ
  1979.     bsr    PS_IF_MMW                * 通信
  1980.     moveq.l    #$00,d1                    * CMD 00
  1981.     bsr    PS_IF_MMW                * 通信
  1982.     moveq.l    #$00,d1                    * CMD 00
  1983.     bsr    PS_IF_MMW                * 通信
  1984.     moveq.l    #$00,d1                    * CMD 00
  1985.     bsr    PS_IF_MMW                * 通信
  1986.     cmpi.b    #$47,d0
  1987.     bne    PS_MEMFWRITE_11
  1988.     moveq.l    #0,d0                    * 正常終了
  1989. PS_MEMFWRITE_2:
  1990.     move.b    #9,(a2)                    * PC4 = 1
  1991.     rts
  1992.  
  1993. PS_MEMFWRITE_10:
  1994.     moveq.l    #$fb,d0                    * メモリカード未接続
  1995.     bra    PS_MEMFWRITE_2
  1996.  
  1997. PS_MEMFWRITE_11:
  1998.     moveq.l    #$f9,d0                    * 書き込みエラー
  1999.     bra    PS_MEMFWRITE_2
  2000.  
  2001. *
  2002. * 1バイトコマンド転送 & データ取得
  2003. *
  2004. * IN    D1.B =    コマンド
  2005. *    D6.W =  WAIT TIME
  2006. *    A0.L =    $e9a001
  2007. *    A2.L =    $e9a007
  2008. *
  2009. * OUT    D0.B =    データ
  2010. *    D1.L =    破壊
  2011. *    D2.L =    破壊
  2012. PS_IF_MMW:
  2013.     moveq.l    #7,d2                    * CLKカウンタ
  2014.     not.b    d1                    * CMD反転
  2015.     lsr.b    #1,d1                    * XフラグにCMD
  2016.     move.w    sr,-(a7)
  2017.     ori.w    #$0700,sr                * 割り込み禁止
  2018. PS_IF_MMW_1:
  2019.     moveq.l    #7,d0
  2020.     roxl.b    #1,d0
  2021.     move.b    d0,(a2)                    * CMD書き込み
  2022.     move.b    #$d,(a2)                * CLK = 0
  2023.     moveq.l    #$3f,d0                    * WAIT TIME
  2024.     bsr    JOY_WAIT                * WAIT
  2025.     move.b    #$c,(a2)                * CLK = 1
  2026.     move.b    (a1),d0                    * DAT読み込み
  2027.     lsr.b    #1,d0                    * XフラグにDAT
  2028.     roxr.b    #1,d1                    * d1にDATをセットして、XフラグにCMD
  2029.     moveq.l    #$3f,d0                    * WAIT TIME
  2030.     bsr    JOY_WAIT                * WAIT
  2031.     dbra    d2,PS_IF_MMW_1
  2032.     move.b    #$0e,(a2)                * CMD(1)書き込み
  2033.     move.w    (a7)+,sr
  2034.     move.b    d1,d0
  2035.     rts
  2036.  
  2037. PS_MOTOR:
  2038.     cmpi.w    #JOY_MAX,d3
  2039.     bcc    PS_MOTOR_10                * ジョイスティック番号が範囲外か?
  2040.     move.w    d3,d0
  2041.     lsl.w    #8,d0
  2042.     lea.l    JOY_DATA(pc),a0
  2043.     adda.w    d0,a0
  2044.     btst.l    #0,d4
  2045.     sne.b    JOY_MOTOR_STS(a0)
  2046.     move.b    d5,d0
  2047.     btst.l    #1,d4
  2048.     bne    PS_MOTOR_1
  2049.     moveq.l    #0,d0
  2050. PS_MOTOR_1:
  2051.     move.b    d0,JOY_MOTOR_STS+1(a0)
  2052.     moveq.l    #0,d0                    * 正常終了
  2053.     rts
  2054. PS_MOTOR_10:
  2055.     moveq.l    #$fe,d0                    * ジョイスティック番号が範囲外
  2056.     rts
  2057.  
  2058. ANALOG_GET:
  2059.     cmpi.w    #JOY_MAX,d3
  2060.     bcc    ANALOG_GET_2                * ジョイスティック番号が範囲外か?
  2061.     movem.l    d1/a1,-(a7)                * レジスタ保存
  2062.     move.w    d3,d1
  2063.     bsr    IOCS3B                    * ジョイスティック読み込み
  2064.     lsl.w    #8,d1
  2065.     lea.l    JOY_DATA(pc),a0
  2066.     adda.w    d1,a0
  2067.     move.l    JOY_PAD_TYPE(a0),d0
  2068.     move.b    JOY_D_DATA(a0),(a1)+
  2069.     move.b    JOY_D_DATA+1(a0),(a1)+
  2070.     move.b    JOY_ANALOG_FLG+1(a0),(a1)+
  2071.     move.b    JOY_LUD_DATA(a0),(a1)+
  2072.     move.b    JOY_LLR_DATA(a0),(a1)+
  2073.     move.b    JOY_RUD_DATA(a0),(a1)+
  2074.     move.b    JOY_RLR_DATA(a0),(a1)+
  2075.     move.b    JOY_BTN1_DATA(a0),(a1)+
  2076.     move.b    JOY_BTN2_DATA(a0),(a1)+
  2077.     move.b    JOY_BTN3_DATA(a0),(a1)+
  2078.     move.b    JOY_BTN4_DATA(a0),(a1)
  2079.     movem.l    (a7)+,d1/a1                * レジスタ復帰
  2080. ANALOG_GET_1:
  2081.     rts
  2082. ANALOG_GET_2:
  2083.     moveq.l    #$fe,d0                    * ジョイスティック番号が範囲外
  2084.     bra    ANALOG_GET_1
  2085.  
  2086. IOCSF2:
  2087.     cmpi.w    #$3,d1
  2088.     bcc    IOCSF2_1                * モード指定が範囲外か?
  2089.     move.w    d1,d0
  2090.     add.w    d0,d0                    * 2倍
  2091.     move.w    IOCSF2_TBL(pc,d0.w),d0
  2092.     jmp    IOCSF2_TBL(pc,d0.w)            * 各モード指定に飛ぶ
  2093. IOCSF2_1:
  2094.     moveq.l    #$ff,d0                    * 設定値が範囲外
  2095.     rts
  2096.  
  2097. IOCSF2_TBL:
  2098.     .dc.w    F2_ANAGET-IOCSF2_TBL            * アナログジョイスティック読み込み
  2099.     .dc.w    F2_JOYMODE-IOCSF2_TBL            * ジョイスティックモード
  2100.     .dc.w    F2_SPEED-IOCSF2_TBL            * 通信速度設定
  2101.  
  2102. F2_ANAGET:
  2103.     movem.l    d1/a1,-(a7)                * レジスタ保存
  2104.     moveq.l    #0,d1                    * ジョイスティック番号0
  2105.     bsr    IOCS3B                    * ジョイスティック読み込み
  2106.     lea.l    JOY_DATA(pc),a0                * バッファアドレス
  2107.     move.b    JOY_LUD_DATA(a0),d1            * 上下値読み込み
  2108.     move.w    d1,(a1)+                * 上下値セット
  2109.     move.b    JOY_LLR_DATA(a0),d1            * 左右値読み込み
  2110.     move.w    d1,(a1)+                * 左右値セット
  2111.     move.b    JOY_RUD_DATA(a0),d1            * 上下値読み込み
  2112.     btst.b    #2,JOY_ANALOG_FLG+1(a0)            * 上下値が有効か?
  2113.     bne    F2_ANAGET_1
  2114.     btst.b    #4,JOY_ANALOG_FLG+1(a0)            * ボタン1が有効か?
  2115.     beq    F2_ANAGET_1
  2116.     move.b    JOY_BTN1_DATA(a0),d1            * ボタン1値読み込み
  2117. F2_ANAGET_1:
  2118.     move.w    d1,(a1)+                * スロットル値セット
  2119.     move.b    JOY_RLR_DATA(a0),d1            * 左右値読み込み
  2120.     btst.b    #3,JOY_ANALOG_FLG+1(a0)            * 左右値が有効か?
  2121.     bne    F2_ANAGET_2
  2122.     btst.b    #5,JOY_ANALOG_FLG+1(a0)            * ボタン2が有効か?
  2123.     beq    F2_ANAGET_2
  2124.     move.b    JOY_BTN2_DATA(a0),d1            * ボタン2値読み込み
  2125. F2_ANAGET_2:
  2126.     move.w    d1,(a1)+                * オプション値セット
  2127.     move.w    JOY_D_DATA(a0),(a1)            * デジタルデータ
  2128.     moveq.l    #0,d0                    * 正常終了
  2129.     movem.l    (a7)+,d1/a1                * レジスタ復帰
  2130.     rts
  2131.  
  2132. F2_JOYMODE:
  2133.     move.l    d1,-(a7)                * レジスタ保存
  2134.     moveq.l    #0,d1                    * ジョイスティック番号0
  2135.     bsr    IOCS3B                    * ジョイスティック読み込み
  2136.     moveq.l    #0,d0
  2137.     lea.l    JOY_DATA(pc),a0                * バッファアドレス
  2138.     tst.b    JOY_ANALOG_FLG+1(a0)
  2139.     beq    F2_JOYMODE_1
  2140.     moveq.l    #1,d0                    * アナログモード
  2141. F2_JOYMODE_1:
  2142.     move.l    (a7)+,d1                * レジスタ復帰
  2143.     rts
  2144.  
  2145. F2_SPEED:
  2146.     moveq.l    #0,d0                    * 最高速度
  2147.     rts
  2148.  
  2149. IOCS3B_VEC:
  2150.     .dc.l    0                    * IOCS$3Bアドレス
  2151. IOCSF2_VEC:
  2152.     .dc.l    0                    * IOCS$F2アドレス
  2153. STRTG_ADR:
  2154.     .dc.l    0                    * ストラテジアドレス
  2155. STRTG_RTN:
  2156.     move.l    a5,STRTG_ADR                * ストラテジルーチン
  2157.     rts
  2158. DEV_RTN:
  2159.     movem.l    d0-d6/a1-a5,-(a7)            * ドライバルーチン
  2160.     movea.l    STRTG_ADR(pc),a5            * ストラテジアドレス取得
  2161.     move.w    #$5003,d0                * エラーリターン
  2162.     tst.b    $0002(a5)                * 処理番号チェック
  2163.     bne    DEV_RTN1                * 初期化以外か?
  2164.     bsr    DEV_INIT                * デバイスドライバ初期化
  2165. DEV_RTN1:
  2166.     move.b    d0,$0003(a5)
  2167.     lsr.w    #8,d0
  2168.     move.b    d0,$0004(a5)                * エラーコードセット
  2169.     movem.l    (a7)+,d0-d6/a1-a5            * レジスタ復帰
  2170.     rts
  2171.  
  2172. DEV_INIT:                        * ドライバ初期化
  2173.     pea    TITLE(pc)
  2174.     .dc.w    $ff09                    * タイトル表示
  2175.     addq.w    #4,a7                    * スタック補正
  2176.     bsr    KEEP_CHK1
  2177.     tst.l    d0
  2178.     beq    DEV_INIT_1
  2179.     pea    MSG_DATA1(pc)
  2180. DEV_INIT_0:
  2181.     .dc.w    $ff09
  2182.     addq.w    #4,a7
  2183.     move.w    #1,d0                    * エラーコード異常終了セット
  2184.     rts
  2185. DEV_INIT_1:
  2186.     bsr    PARM_RTN1
  2187.     tst.l    d0
  2188.     bmi    DEV_INIT_3
  2189.     move.b    SW_R(pc),d0
  2190.     bne    DEV_INIT_3
  2191.     pea    TITLE2(pc)
  2192.     .dc.w    $ff09
  2193.     pea    IOCS3B(pc)                * 処理アドレスセット
  2194.     move.w    #$013b,-(a7)                * ベクタ番号(IOCS$3B)セット
  2195.     .dc.w    $ff25                    * ベクタセット
  2196.     pea    IOCSF2(pc)                * 処理アドレスセット
  2197.     move.w    #$01f2,-(a7)                * ベクタ番号(IOCS$F2)セット
  2198.     .dc.w    $ff25                    * ベクタセット
  2199.     lea.l    16(a7),a7
  2200.     moveq.l    #$ff,d1
  2201.     moveq.l    #0,d2
  2202.     moveq.l    #0,d3
  2203.     moveq.l    #$3b,d0
  2204.     trap    #15
  2205.     bsr    MODE_DSP
  2206.     move.l    #DEV_INIT,$000e(a5)            * デバイスドライバ最終アドレスセット
  2207.     clr.w    d0                    * エラーコード正常終了セット
  2208.     rts
  2209. DEV_INIT_3:
  2210.     pea    MSG_DATA10(pc)
  2211.     bra    DEV_INIT_0
  2212.  
  2213. PARM_RTN1:
  2214.     movea.l    18(a5),a1
  2215. PARM_RTN1_1:
  2216.     tst.b    (a1)+
  2217.     bne    PARM_RTN1_1
  2218. PARM_RTN1_2:
  2219.     tst.b    (a1)
  2220.     beq    PARM_RTN1_4
  2221. PARM_RTN1_3:
  2222.     move.b    (a1)+,d0
  2223.     beq    PARM_RTN1_2
  2224.     bsr    PARM_SUB
  2225.     tst.l    d0
  2226.     beq    PARM_RTN1_3
  2227.     rts
  2228. PARM_RTN1_4:
  2229.     moveq.l    #0,d0
  2230.     rts
  2231.  
  2232. MAIN:
  2233.     pea    TITLE(pc)
  2234.     .dc.w    $ff09                    * タイトル表示
  2235.     addq.w    #4,a7
  2236.     movea.l    a2,a1
  2237.     bsr    PARM_RTN2
  2238.     tst.l    d0
  2239.     bmi    MAIN_5
  2240.     bsr    KEEP_CHK2
  2241.     tst.l    d0
  2242.     beq    MAIN_1
  2243.     move.b    SW_R(pc),d0
  2244.     bne    MAIN_4
  2245.     pea    MSG_DATA2(pc)
  2246. MAIN_0:
  2247.     bsr    MODE_CHG
  2248.     move.b    SW_D(pc),d0
  2249.     bne    MAIN_01
  2250.     bsr    MODE_DSP
  2251. MAIN_01:
  2252.     .dc.w    $ff09
  2253.     addq.w    #4,a7
  2254.     .dc.w    $ff00
  2255. MAIN_1:
  2256.     bsr    KEEP_CHK1
  2257.     tst.l    d0
  2258.     beq    MAIN_2
  2259.     pea    MSG_DATA1(pc)
  2260.     bra    MAIN_0
  2261. MAIN_2:
  2262.     move.b    SW_R(pc),d0
  2263.     beq    MAIN_3
  2264.     pea    MSG_DATA3(pc)
  2265.     bra    MAIN_01
  2266. MAIN_3:
  2267.     pea    IOCS3B(pc)                * 処理アドレスセット
  2268.     move.w    #$013b,-(a7)                * ベクタ番号(IOCS$3B)セット
  2269.     .dc.w    $ff25                    * ベクタセット
  2270.     move.l    d0,IOCS3B_VEC
  2271.     pea    IOCSF2(pc)                * 処理アドレスセット
  2272.     move.w    #$01f2,-(a7)                * ベクタ番号(IOCS$F2)セット
  2273.     .dc.w    $ff25                    * ベクタセット
  2274.     move.l    d0,IOCSF2_VEC
  2275.     lea.l    12(a7),a7
  2276.     moveq.l    #$ff,d1
  2277.     moveq.l    #0,d2
  2278.     moveq.l    #0,d3
  2279.     moveq.l    #$3b,d0
  2280.     trap    #15
  2281.     move.b    SW_D(pc),d0
  2282.     bne    MAIN_31
  2283.     pea    TITLE2(pc)
  2284.     .dc.w    $ff09
  2285.     addq.w    #4,a7
  2286.     bsr    MODE_DSP
  2287. MAIN_31:
  2288.     pea    MSG_DATA4(pc)
  2289.     .dc.w    $ff09
  2290.     addq.w    #2,a7
  2291.     clr.w    (a7)
  2292.     move.l    #DEV_INIT-DEVHEAD,-(a7)
  2293.     .dc.w    $ff31
  2294. MAIN_4:
  2295.     bsr    KEEP_CHK3
  2296.     tst.l    d0
  2297.     bne    MAIN_41
  2298.     pea    MSG_DATA6(pc)
  2299.     bra    MAIN_01
  2300. MAIN_41:
  2301.     moveq.l    #$ff,d1
  2302.     moveq.l    #0,d2
  2303.     moveq.l    #1,d3
  2304.     moveq.l    #$3b,d0
  2305.     trap    #15
  2306.     lea.l    IOCS3B_VEC-DEVHEAD+256(a0),a1
  2307.     move.l    (a1),-(a7)
  2308.     move.w    #$013b,-(a7)                * ベクタ番号(IOCS$3B)セット
  2309.     .dc.w    $ff25                    * ベクタセット
  2310.     lea.l    IOCSF2_VEC-DEVHEAD+256(a0),a1
  2311.     move.l    (a1),2(a7)
  2312.     move.w    #$01f2,(a7)                * ベクタ番号(IOCS$F2)セット
  2313.     .dc.w    $ff25                    * ベクタセット
  2314.     pea    $10(a0)
  2315.     .dc.w    $ff49
  2316.     pea    MSG_DATA5(pc)
  2317.     .dc.w    $ff09
  2318.     lea.l    14(a7),a7
  2319.     .dc.w    $ff00
  2320. MAIN_5:
  2321.     pea    MSG_DATA10(pc)
  2322.     .dc.w    $ff09
  2323.     pea    TITLE3(pc)
  2324.     .dc.w    $ff09
  2325.     addq.w    #8,a7
  2326.     .dc.w    $ff00
  2327.  
  2328. MODE_CHG:
  2329.     moveq.l    #$ff,d1
  2330.     move.b    SW_M(pc),d0
  2331.     beq    MODE_CHG2
  2332.     moveq.l    #$10,d2
  2333.     move.w    COM_DATA+COM_HANTEI_MODE(pc),d3
  2334.     moveq.l    #$3b,d0
  2335.     trap    #15
  2336. MODE_CHG2:
  2337.     moveq.l    #JOY_MAX-1,d4
  2338.     move.w    d4,d0
  2339.     lsl.w    #8,d0
  2340.     lea.l    JOY_DATA(pc),a2
  2341.     adda.w    d0,a2
  2342.     lea.l    SW_B+JOY_MAX(pc),a3
  2343. MODE_CHG2_1:
  2344.     tst.b    -(a3)
  2345.     beq    MODE_CHG2_3
  2346.     move.w    JOY_CNV_MODE(a2),d3
  2347.     beq    MODE_CHG2_2
  2348.     lea.l    JOY_CNV_DATA(a2),a1
  2349.     moveq.l    #$12,d2
  2350.     moveq.l    #$3b,d0
  2351.     trap    #15
  2352. MODE_CHG2_2:
  2353.     moveq.l    #$11,d2
  2354.     moveq.l    #$3b,d0
  2355.     trap    #15
  2356. MODE_CHG2_3:
  2357.     lea.l    -DATA_SIZE(a2),a2
  2358.     dbra    d4,MODE_CHG2_1
  2359. MODE_CHG3:
  2360.     move.b    SW_I(pc),d0
  2361.     beq    MODE_CHG4
  2362.     moveq.l    #$13,d2
  2363.     move.w    COM_DATA+COM_IOCS3B_OUT(pc),d3
  2364.     moveq.l    #$3b,d0
  2365.     trap    #15
  2366. MODE_CHG4:
  2367.     move.b    SW_T(pc),d0
  2368.     beq    MODE_CHG5
  2369.     moveq.l    #$15,d2
  2370.     move.w    COM_DATA+COM_JOY1_MAX(pc),d3
  2371.     moveq.l    #$3b,d0
  2372.     trap    #15
  2373. MODE_CHG5:
  2374.     moveq.l    #JOY_MAX-1,d4
  2375.     move.w    d4,d0
  2376.     lsl.w    #8,d0
  2377.     lea.l    JOY_DATA(pc),a2
  2378.     adda.w    d0,a2
  2379.     lea.l    SW_E+JOY_MAX(pc),a3
  2380. MODE_CHG6_1:
  2381.     tst.b    -(a3)
  2382.     beq    MODE_CHG6_2
  2383.     move.w    JOY_PLUS_EMU(a2),d3
  2384.     moveq.l    #$16,d2
  2385.     moveq.l    #$3b,d0
  2386.     trap    #15
  2387. MODE_CHG6_2:
  2388.     lea.l    -DATA_SIZE(a2),a2
  2389.     dbra    d4,MODE_CHG6_1
  2390.     moveq.l    #JOY_MAX-1,d4
  2391.     move.w    d4,d0
  2392.     lsl.w    #8,d0
  2393.     lea.l    JOY_DATA(pc),a2
  2394.     adda.w    d0,a2
  2395.     lea.l    SW_P+JOY_MAX(pc),a3
  2396. MODE_CHG7_1:
  2397.     tst.b    -(a3)
  2398.     beq    MODE_CHG7_2
  2399.     move.w    JOY_PLUS_EMU+2(a2),d3
  2400.     moveq.l    #$17,d2
  2401.     moveq.l    #$3b,d0
  2402.     trap    #15
  2403. MODE_CHG7_2:
  2404.     lea.l    -DATA_SIZE(a2),a2
  2405.     dbra    d4,MODE_CHG7_1
  2406.     moveq.l    #JOY_MAX-1,d4
  2407.     move.w    d4,d0
  2408.     lsl.w    #8,d0
  2409.     lea.l    JOY_DATA(pc),a2
  2410.     adda.w    d0,a2
  2411.     lea.l    SW_S+JOY_MAX(pc),a3
  2412. MODE_CHG8_1:
  2413.     tst.b    -(a3)
  2414.     beq    MODE_CHG8_2
  2415.     move.w    JOY_STASEL_MODE(a2),d3
  2416.     moveq.l    #$18,d2
  2417.     moveq.l    #$3b,d0
  2418.     trap    #15
  2419. MODE_CHG8_2:
  2420.     lea.l    -DATA_SIZE(a2),a2
  2421.     dbra    d4,MODE_CHG8_1
  2422.     moveq.l    #JOY_MAX-1,d4
  2423.     moveq.l    #$19,d2
  2424.     moveq.l    #0,d3
  2425. MODE_CHG9_1:
  2426.     move.w    d4,d0
  2427.     lsl.w    #8,d0
  2428.     lea.l    JOY_DATA+JOY_ONOFF_SU+32(pc),a2
  2429.     adda.w    d0,a2
  2430.     move.w    d4,d0
  2431.     lsl.w    #4,d0
  2432.     lea.l    SW_L+16(pc),a3
  2433.     adda.w    d0,a3
  2434.     moveq.l    #16-1,d5
  2435. MODE_CHG9_2:
  2436.     move.w    -(a2),d3
  2437.     tst.b    -(a3)
  2438.     beq    MODE_CHG9_3
  2439.     moveq.l    #$3b,d0
  2440.     trap    #15
  2441. MODE_CHG9_3:
  2442.     dbra    d5,MODE_CHG9_2
  2443.     dbra    d4,MODE_CHG9_1
  2444.     rts
  2445.  
  2446. MODE_DSP:
  2447.     clr.l    a1
  2448.     moveq.l    #$81,d0
  2449.     trap    #15
  2450.     move.l    d0,-(a7)
  2451.     pea    MSG_DATA20(pc)
  2452.     .dc.w    $ff09
  2453.     moveq.l    #$ff,d1
  2454.     moveq.l    #$10,d2
  2455.     moveq.l    #$ff,d3
  2456.     moveq.l    #$3b,d0
  2457.     trap    #15
  2458.     tst.w    d0
  2459.     beq    MODE_DSP_1_2
  2460.     cmpi.w    #1,d0
  2461.     bne    MODE_DSP_1_1
  2462.     pea    MSG_DATA22(pc)
  2463.     bra    MODE_DSP_1_3
  2464. MODE_DSP_1_1:
  2465.     pea    MSG_DATA23(pc)
  2466.     bra    MODE_DSP_1_3
  2467. MODE_DSP_1_2:
  2468.     pea    MSG_DATA21(pc)
  2469. MODE_DSP_1_3:
  2470.     .dc.w    $ff09
  2471.     pea    MSG_DATA30(pc)
  2472.     .dc.w    $ff09
  2473.     lea.l    12(a7),a7
  2474.     moveq.l    #JOY_MAX-1,d6
  2475.     moveq.l    #0,d5
  2476. MODE_DSP_2_1:
  2477.     move.w    d5,d1
  2478.     moveq.l    #$3b,d0
  2479.     trap    #15
  2480.     moveq.l    #$ff,d1
  2481.     moveq.l    #$02,d2
  2482.     move.w    d5,d3
  2483.     moveq.l    #$3b,d0
  2484.     trap    #15
  2485.     lea.l    MSG_DATA31(pc),a2
  2486.     move.b    d5,d0
  2487.     addi.b    #$30,d0
  2488.     move.b    d0,3(a2)
  2489.     move.l    a2,-(a7)
  2490.     .dc.w    $ff09
  2491.     addq.w    #4,a7
  2492.     moveq.l    #16-1,d1
  2493.     lea.l    JOY_ONOFF_SU+32(a1),a2
  2494. LENSHA_DISP_1:
  2495.     moveq.l    #$30,d0
  2496.     tst.w    -(a2)
  2497.     beq    LENSHA_DISP_2
  2498.     moveq.l    #$31,d0
  2499. LENSHA_DISP_2:
  2500.     move.w    d0,-(a7)
  2501.     .dc.w    $ff02
  2502.     addq.w    #2,a7
  2503.     dbra    d1,LENSHA_DISP_1
  2504.     pea    MSG_DATA32(pc)
  2505.     .dc.w    $ff09
  2506.     tst.w    JOY_CNV_MODE(a1)
  2507.     beq    MODE_DSP_3_1
  2508.     pea    MSG_DATA41(pc)
  2509.     bra    MODE_DSP_3_2
  2510. MODE_DSP_3_1:
  2511.     pea    MSG_DATA40(pc)
  2512. MODE_DSP_3_2:
  2513.     .dc.w    $ff09
  2514.     addq.w    #8,a7
  2515.     pea    MSG_DATA33(pc)
  2516.     .dc.w    $ff09
  2517.     tst.w    JOY_STASEL_MODE(a1)
  2518.     beq    MODE_DSP_4_1
  2519.     pea    MSG_DATA43(pc)
  2520.     bra    MODE_DSP_4_2
  2521. MODE_DSP_4_1:
  2522.     pea    MSG_DATA42(pc)
  2523. MODE_DSP_4_2:
  2524.     .dc.w    $ff09
  2525.     addq.w    #8,a7
  2526.     pea    MSG_DATA39(pc)
  2527.     .dc.w    $ff09
  2528.     move.l    JOY_PAD_TYPE(a1),d0
  2529.     bmi    MODE_DSP_5_1
  2530.     andi.w    #$00ff,d0
  2531.     lea.l    PAD_DISP_INFO(pc),a2
  2532. PAD_DISP_1:
  2533.     move.l    (a2)+,d1
  2534.     bmi    PAD_DISP_2
  2535.     cmp.l    d1,d0
  2536.     beq    PAD_DISP_2
  2537.     addq.w    #4,a2
  2538.     bra    PAD_DISP_1
  2539. PAD_DISP_2:
  2540.     move.l    (a2),-(a7)
  2541.     bra    MODE_DSP_5_2
  2542. MODE_DSP_5_1:
  2543.     pea    MSG_DATA47(pc)
  2544. MODE_DSP_5_2:
  2545.     .dc.w    $ff09
  2546.     addq.w    #8,a7
  2547.     pea    MSG_DATA34(pc)
  2548.     .dc.w    $ff09
  2549.     tst.w    JOY_PORT_NO(a1)
  2550.     beq    MODE_DSP_6_2
  2551.     bpl    MODE_DSP_6_1
  2552.     pea    MSG_DATA46(pc)
  2553.     bra    MODE_DSP_6_3
  2554. MODE_DSP_6_1:
  2555.     pea    MSG_DATA45(pc)
  2556.     bra    MODE_DSP_6_3
  2557. MODE_DSP_6_2:
  2558.     pea    MSG_DATA44(pc)
  2559. MODE_DSP_6_3:
  2560.     .dc.w    $ff09
  2561.     addq.w    #8,a7
  2562.     pea    MSG_DATA36(pc)
  2563.     .dc.w    $ff09
  2564.     moveq.l    #0,d1
  2565.     lea.l    MSG_DATA37(pc),a2
  2566.     move.b    JOY_PLUS_EMU+1(a1),d0
  2567.     move.b    d0,d1
  2568.     lsr.b    #4,d1
  2569.     move.b    DTOH_TBL(pc,d1.w),(a2)
  2570.     andi.w    #$000f,d0
  2571.     move.b    DTOH_TBL(pc,d0.w),1(a2)
  2572.     move.l    a2,(a7)
  2573.     .dc.w    $ff09
  2574.     lea.l    MSG_DATA38(pc),a2
  2575.     move.b    JOY_PLUS_EMU+3(a1),d0
  2576.     move.b    d0,d1
  2577.     lsr.b    #4,d1
  2578.     move.b    DTOH_TBL(pc,d1.w),(a2)
  2579.     andi.w    #$000f,d0
  2580.     move.b    DTOH_TBL(pc,d0.w),1(a2)
  2581.     move.l    a2,(a7)
  2582.     .dc.w    $ff09
  2583.     addq.w    #4,a7
  2584.     addq.w    #1,d5
  2585.     dbra    d6,MODE_DSP_2_1
  2586.     moveq.l    #$ff,d1
  2587.     moveq.l    #$13,d2
  2588.     moveq.l    #$ff,d3
  2589.     moveq.l    #$3b,d0
  2590.     trap    #15
  2591.     tst.w    d0
  2592.     bne    MODE_DSP_2_10
  2593.     pea    MSG_DATA25(pc)
  2594.     bra    MODE_DSP_2_11
  2595. MODE_DSP_2_10:
  2596.     pea    MSG_DATA24(pc)
  2597. MODE_DSP_2_11:
  2598.     .dc.w    $ff09
  2599.     addq.w    #4,a7
  2600.     move.l    (a7)+,d0
  2601.     bmi    MODE_DSP_END_1
  2602.     movea.l    d0,a1
  2603.     moveq.l    #$81,d0
  2604.     trap    #15
  2605. MODE_DSP_END_1:
  2606.     rts
  2607.  
  2608. DTOH_TBL:
  2609.     .dc.b    '0'
  2610.     .dc.b    '1'
  2611.     .dc.b    '2'
  2612.     .dc.b    '3'
  2613.     .dc.b    '4'
  2614.     .dc.b    '5'
  2615.     .dc.b    '6'
  2616.     .dc.b    '7'
  2617.     .dc.b    '8'
  2618.     .dc.b    '9'
  2619.     .dc.b    'A'
  2620.     .dc.b    'B'
  2621.     .dc.b    'C'
  2622.     .dc.b    'D'
  2623.     .dc.b    'E'
  2624.     .dc.b    'F'
  2625.  
  2626. KEEP_CHK1:
  2627.     movem.l    d1-d2/a1,-(a7)                * レジスタ保存
  2628.     moveq.l    #$ff,d1                    * モード指定
  2629.     moveq.l    #1,d2                    * 常駐状態取得
  2630.     moveq.l    #$3b,d0
  2631.     trap    #15
  2632.     tst.l    d0
  2633.     beq    KEEP_CHK1_1
  2634.     move.l    d0,a1
  2635.     moveq.l    #$84,d0
  2636.     trap    #15
  2637.     cmpi.l    #'JOYD',d0
  2638.     bne    KEEP_CHK1_2
  2639.     moveq.l    #$83,d0
  2640.     trap    #15
  2641.     cmpi.w    #'RV',d0
  2642.     bne    KEEP_CHK1_2
  2643.     moveq.l    #1,d0                    * 常駐している
  2644. KEEP_CHK1_1:
  2645.     movem.l    (a7)+,d1-d2/a1                * レジスタ復帰
  2646.     rts
  2647. KEEP_CHK1_2:
  2648.     moveq.l    #0,d0                    * 常駐していない
  2649.     bra    KEEP_CHK1_1
  2650.  
  2651. KEEP_CHK2:
  2652.     pea.l    $0000.w
  2653.     .dc.w    $ff20
  2654.     move.l    d0,(a7)
  2655. KEEP_CHK2_1:
  2656.     move.l    (a0),d1
  2657.     beq    KEEP_CHK2_2
  2658.     move.l    d1,a0
  2659.     cmpi.l    #'JOYD',256+14(a0)
  2660.     bne    KEEP_CHK2_1
  2661.     cmpi.w    #'RV',256+18(a0)
  2662.     bne    KEEP_CHK2_1
  2663.     moveq.l    #1,d1
  2664. KEEP_CHK2_2:
  2665.     .dc.w    $ff20
  2666.     addq.w    #4,a7
  2667.     move.l    d1,d0
  2668.     rts
  2669.  
  2670. KEEP_CHK3:
  2671.     movem.l    d1-d2/a1,-(a7)                * レジスタ保存
  2672.     moveq.l    #$ff,d1                    * モード指定
  2673.     moveq.l    #1,d2                    * 常駐状態取得
  2674.     moveq.l    #$3b,d0
  2675.     trap    #15
  2676.     tst.l    d0
  2677.     beq    KEEP_CHK3_1
  2678.     move.l    d0,a1
  2679.     moveq.l    #$84,d0
  2680.     trap    #15
  2681.     cmpi.l    #'JOYD',d0
  2682.     bne    KEEP_CHK3_2
  2683.     moveq.l    #$83,d0
  2684.     trap    #15
  2685.     cmpi.w    #'RV',d0
  2686.     bne    KEEP_CHK3_2
  2687.     addq.w    #2,a1
  2688.     moveq.l    #$84,d0
  2689.     trap    #15
  2690.     cmp.l    KEEP_CHK_VER(pc),d0
  2691.     bne    KEEP_CHK3_2
  2692.     moveq.l    #1,d0                    * 常駐している
  2693. KEEP_CHK3_1:
  2694.     movem.l    (a7)+,d1-d2/a1                * レジスタ復帰
  2695.     rts
  2696. KEEP_CHK3_2:
  2697.     moveq.l    #0,d0                    * 常駐していない
  2698.     bra    KEEP_CHK3_1
  2699.  
  2700. PARM_RTN2:
  2701.     tst.b    (a1)+
  2702.     beq    PARM_RTN2_2
  2703. PARM_RTN2_1:
  2704.     move.b    (a1)+,d0
  2705.     beq    PARM_RTN2_2
  2706.     cmpi.b    #' ',d0
  2707.     beq    PARM_RTN2_1
  2708.     bsr    PARM_SUB
  2709.     tst.l    d0
  2710.     beq    PARM_RTN2_1
  2711.     rts
  2712. PARM_RTN2_2:
  2713.     moveq.l    #0,d0
  2714.     rts
  2715.  
  2716. PARM_SUB:
  2717.     cmpi.b    #'/',d0
  2718.     beq    PARM_SUB_1
  2719.     cmpi.b    #'-',d0
  2720.     bne    PARM_SUB_ERR1
  2721. PARM_SUB_1:
  2722.     move.b    (a1)+,d0
  2723.     beq    PARM_SUB_ERR1
  2724.     ori.b    #$20,d0
  2725.     cmpi.b    #'m',d0
  2726.     beq    PARM_SUB_M
  2727.     cmpi.b    #'i',d0
  2728.     beq    PARM_SUB_I
  2729.     cmpi.b    #'r',d0
  2730.     beq    PARM_SUB_R
  2731.     cmpi.b    #'t',d0
  2732.     beq    PARM_SUB_T
  2733.     cmpi.b    #'e',d0
  2734.     beq    PARM_SUB_E
  2735.     cmpi.b    #'p',d0
  2736.     beq    PARM_SUB_P
  2737.     cmpi.b    #'d',d0
  2738.     beq    PARM_SUB_D
  2739.     cmpi.b    #'s',d0
  2740.     beq    PARM_SUB_S
  2741.     cmpi.b    #'l',d0
  2742.     beq    PARM_SUB_L
  2743.     cmpi.b    #'b',d0
  2744.     bne    PARM_SUB_ERR1
  2745. PARM_SUB_B:
  2746.     move.b    (a1)+,d1
  2747.     subi.b    #'0',d1
  2748.     cmpi.b    #JOY_MAX-1,d1
  2749.     bhi    PARM_SUB_ERR1
  2750.     ext.w    d1
  2751.     move.b    (a1),d0
  2752.     beq    PARM_SUB_B2
  2753.     cmpi.b    #' ',d0
  2754.     beq    PARM_SUB_B2
  2755.     bsr    READ_CNV_DATA
  2756.     tst.l    d0
  2757.     bmi    PARM_SUB_ERR2
  2758.     moveq.l    #1,d0
  2759. PARM_SUB_B1:
  2760.     lea.l    SW_B(pc),a2
  2761.     st.b    0(a2,d1.w)
  2762.     lea.l    JOY_DATA(pc),a2
  2763.     lsl.w    #8,d1
  2764.     adda.w    d1,a2
  2765.     move.w    d0,JOY_CNV_MODE(a2)
  2766.     moveq.l    #0,d0
  2767.     rts
  2768. PARM_SUB_B2:
  2769.     moveq.l    #0,d0
  2770.     bra    PARM_SUB_B1
  2771. PARM_SUB_T:
  2772.     move.b    (a1)+,d0
  2773.     subi.b    #'0',d0
  2774.     cmpi.b    #9,d0
  2775.     bhi    PARM_SUB_ERR1
  2776.     ext.w    d0
  2777.     move.w    d0,COM_DATA+COM_JOY1_MAX
  2778.     st.b    SW_T
  2779.     moveq.l    #0,d0
  2780.     rts
  2781. PARM_SUB_E:
  2782.     move.b    (a1)+,d1
  2783.     subi.b    #'0',d1
  2784.     cmpi.b    #JOY_MAX-1,d1
  2785.     bhi    PARM_SUB_ERR1
  2786.     ext.w    d1
  2787.     cmpi.b    #',',(a1)+
  2788.     bne    PARM_SUB_ERR1
  2789.     move.b    (a1)+,d0
  2790.     ori.b    #$20,d0
  2791.     subi.b    #'0',d0
  2792.     cmpi.b    #9,d0
  2793.     bls    PARM_SUB_E1
  2794.     subi.b    #$31,d0
  2795.     cmpi.b    #5,d0
  2796.     bhi    PARM_SUB_ERR1
  2797.     addi.b    #10,d0
  2798. PARM_SUB_E1:
  2799.     ext.w    d0
  2800.     lea.l    SW_E(pc),a2
  2801.     st.b    0(a2,d1.w)
  2802.     lea.l    JOY_DATA(pc),a2
  2803.     lsl.w    #8,d1
  2804.     adda.w    d1,a2
  2805.     move.w    d0,JOY_PLUS_EMU(a2)
  2806.     moveq.l    #0,d0
  2807.     rts
  2808. PARM_SUB_P:
  2809.     move.b    (a1)+,d1
  2810.     subi.b    #'0',d1
  2811.     cmpi.b    #JOY_MAX-1,d1
  2812.     bhi    PARM_SUB_ERR1
  2813.     ext.w    d1
  2814.     cmpi.b    #',',(a1)+
  2815.     bne    PARM_SUB_ERR1
  2816.     moveq.l    #0,d2
  2817.     move.b    (a1)+,d2
  2818.     subi.b    #'0',d2
  2819.     cmpi.b    #7,d2
  2820.     bhi    PARM_SUB_ERR1
  2821.     lsl.b    #4,d2
  2822.     move.b    (a1)+,d0
  2823.     ori.b    #$20,d0
  2824.     subi.b    #'0',d0
  2825.     cmpi.b    #9,d0
  2826.     bls    PARM_SUB_P1
  2827.     subi.b    #$31,d0
  2828.     cmpi.b    #5,d0
  2829.     bhi    PARM_SUB_ERR1
  2830.     addi.b    #10,d0
  2831. PARM_SUB_P1:
  2832.     or.b    d0,d2
  2833.     lea.l    SW_P(pc),a2
  2834.     st.b    0(a2,d1.w)
  2835.     lea.l    JOY_DATA(pc),a2
  2836.     lsl.w    #8,d1
  2837.     adda.w    d1,a2
  2838.     move.w    d2,JOY_PLUS_EMU+2(a2)
  2839.     moveq.l    #0,d0
  2840.     rts
  2841. PARM_SUB_S:
  2842.     move.b    (a1)+,d1
  2843.     subi.b    #'0',d1
  2844.     cmpi.b    #JOY_MAX-1,d1
  2845.     bhi    PARM_SUB_ERR1
  2846.     ext.w    d1
  2847.     cmpi.b    #',',(a1)+
  2848.     bne    PARM_SUB_ERR1
  2849.     move.b    (a1)+,d0
  2850.     ori.b    #$20,d0
  2851.     subi.b    #'0',d0
  2852.     cmpi.b    #1,d0
  2853.     bhi    PARM_SUB_ERR1
  2854.     ext.w    d0
  2855.     lea.l    SW_S(pc),a2
  2856.     st.b    0(a2,d1.w)
  2857.     lea.l    JOY_DATA(pc),a2
  2858.     lsl.w    #8,d1
  2859.     adda.w    d1,a2
  2860.     move.w    d0,JOY_STASEL_MODE(a2)
  2861.     moveq.l    #0,d0
  2862.     rts
  2863.  
  2864. PARM_SUB_L:
  2865.     move.b    (a1)+,d1
  2866.     subi.b    #'0',d1
  2867.     cmpi.b    #JOY_MAX-1,d1
  2868.     bhi    PARM_SUB_ERR1
  2869.     ext.w    d1
  2870.     cmpi.b    #',',(a1)+
  2871.     bne    PARM_SUB_ERR1
  2872.     move.b    (a1)+,d2
  2873.     ori.b    #$20,d2
  2874.     subi.b    #'0',d2
  2875.     cmpi.b    #9,d2
  2876.     bls    PARM_SUB_L1
  2877.     subi.b    #$31,d2
  2878.     cmpi.b    #5,d2
  2879.     bhi    PARM_SUB_ERR1
  2880.     addi.b    #10,d2
  2881. PARM_SUB_L1:
  2882.     ext.w    d2
  2883.     cmpi.b    #',',(a1)+
  2884.     bne    PARM_SUB_ERR1
  2885.     move.b    (a1)+,d3
  2886.     ori.b    #$20,d3
  2887.     subi.b    #'0',d3
  2888.     cmpi.b    #9,d3
  2889.     bls    PARM_SUB_L2
  2890.     subi.b    #$31,d3
  2891.     cmpi.b    #5,d3
  2892.     bhi    PARM_SUB_ERR1
  2893.     addi.b    #10,d3
  2894. PARM_SUB_L2:
  2895.     lsl.w    #4,d3
  2896.     move.b    (a1)+,d0
  2897.     ori.b    #$20,d0
  2898.     subi.b    #'0',d0
  2899.     cmpi.b    #9,d0
  2900.     bls    PARM_SUB_L3
  2901.     subi.b    #$31,d0
  2902.     cmpi.b    #5,d0
  2903.     bhi    PARM_SUB_ERR1
  2904.     addi.b    #10,d0
  2905. PARM_SUB_L3:
  2906.     or.b    d0,d3
  2907.     lsl.w    #8,d3
  2908.     cmpi.b    #',',(a1)+
  2909.     bne    PARM_SUB_ERR1
  2910.     move.b    (a1)+,d3
  2911.     ori.b    #$20,d3
  2912.     subi.b    #'0',d3
  2913.     cmpi.b    #9,d3
  2914.     bls    PARM_SUB_L4
  2915.     subi.b    #$31,d3
  2916.     cmpi.b    #5,d3
  2917.     bhi    PARM_SUB_ERR1
  2918.     addi.b    #10,d3
  2919. PARM_SUB_L4:
  2920.     lsl.b    #4,d3
  2921.     move.b    (a1)+,d0
  2922.     ori.b    #$20,d0
  2923.     subi.b    #'0',d0
  2924.     cmpi.b    #9,d0
  2925.     bls    PARM_SUB_L5
  2926.     subi.b    #$31,d0
  2927.     cmpi.b    #5,d0
  2928.     bhi    PARM_SUB_ERR1
  2929.     addi.b    #10,d0
  2930. PARM_SUB_L5:
  2931.     or.b    d0,d3
  2932.     lea.l    SW_L(pc),a2
  2933.     move.w    d1,d0
  2934.     lsl.w    #4,d0
  2935.     add.w    d2,d0
  2936.     st.b    0(a2,d0.w)
  2937.     lea.l    JOY_DATA(pc),a2
  2938.     lsl.w    #8,d1
  2939.     add.w    d2,d1
  2940.     add.w    d2,d1
  2941.     adda.w    d1,a2
  2942.     move.w    d3,JOY_ONOFF_SU(a2)
  2943.     moveq.l    #0,d0
  2944.     rts
  2945.  
  2946. PARM_SUB_R:
  2947.     st.b    SW_R
  2948.     moveq.l    #0,d0
  2949.     rts
  2950. PARM_SUB_M:
  2951.     move.b    (a1)+,d0
  2952.     subi.b    #'0',d0
  2953.     cmpi.b    #2,d0
  2954.     bhi    PARM_SUB_ERR1
  2955.     ext.w    d0
  2956.     move.w    d0,COM_DATA+COM_HANTEI_MODE
  2957.     st.b    SW_M
  2958.     moveq.l    #0,d0
  2959.     rts
  2960. PARM_SUB_I:
  2961.     move.b    (a1)+,d0
  2962.     subi.b    #'0',d0
  2963.     cmpi.b    #1,d0
  2964.     bhi    PARM_SUB_ERR1
  2965.     ext.w    d0
  2966.     move.w    d0,COM_DATA+COM_IOCS3B_OUT
  2967.     st.b    SW_I
  2968.     moveq.l    #0,d0
  2969.     rts
  2970. PARM_SUB_D:
  2971.     st.b    SW_D
  2972.     moveq.l    #0,d0
  2973.     rts
  2974.  
  2975. PARM_SUB_ERR2:
  2976.     pea    MSG_DATA11(pc)
  2977.     .dc.w    $ff09
  2978.     addq.w    #4,a7
  2979. PARM_SUB_ERR1:
  2980.     moveq.l    #$ff,d0
  2981.     rts
  2982.  
  2983. READ_CNV_DATA:
  2984.     movem.l    d1/a2,-(a7)
  2985.     clr.w    -(a7)
  2986.     move.l    a1,-(a7)
  2987. READ_CNV_DATA_1:
  2988.     move.b    (a1)+,d0
  2989.     beq    READ_CNV_DATA_2
  2990.     cmpi.b    #' ',d0
  2991.     bne    READ_CNV_DATA_1
  2992.     clr.b    -(a1)
  2993.     .dc.w    $ff3d
  2994.     move.b    #' ',(a1)
  2995.     bra    READ_CNV_DATA_5
  2996. READ_CNV_DATA_2:
  2997.     subq.w    #1,a1
  2998.     .dc.w    $ff3d
  2999. READ_CNV_DATA_5:
  3000.     addq.w    #6,a7
  3001.     tst.l    d0
  3002.     bmi    READ_CNV_DATA_3
  3003.     pea.l    $0032.w
  3004.     lsl.w    #8,d1
  3005.     lea.l    JOY_DATA+JOY_CNV_DATA(pc),a2
  3006.     pea    0(a2,d1.w)
  3007.     move.w    d0,-(a7)
  3008.     .dc.w    $ff3f
  3009.     move.l    d0,d1
  3010.     .dc.w    $ff3e
  3011.     lea.l    10(a7),a7
  3012.     move.l    d1,d0
  3013.     bmi    READ_CNV_DATA_3
  3014.     cmpi.l    #32,d1
  3015.     bcs    READ_CNV_DATA_4
  3016.     moveq.l    #0,d0
  3017. READ_CNV_DATA_3:
  3018.     movem.l    (a7)+,d1/a2
  3019.     rts
  3020. READ_CNV_DATA_4:
  3021.     moveq.l    #$ff,d0
  3022.     bra    READ_CNV_DATA_3
  3023.  
  3024. .data
  3025. PAD_DISP_INFO:
  3026.     .dc.l    PAD_TYPE_ATARI*65536,MSG_DATA_PAD_ATARI
  3027.     .dc.l    PAD_TYPE_MD*65536+$00,MSG_DATA_PAD_MD3
  3028.     .dc.l    PAD_TYPE_MD*65536+$01,MSG_DATA_PAD_MD6
  3029.     .dc.l    PAD_TYPE_MD*65536+$0f,MSG_DATA_PAD_MDNC
  3030.     .dc.l    PAD_TYPE_SS*65536+$00,MSG_DATA_PAD_SSD
  3031.     .dc.l    PAD_TYPE_SS*65536+$01,MSG_DATA_PAD_SSA
  3032.     .dc.l    PAD_TYPE_SS*65536+$0f,MSG_DATA_PAD_SSNC
  3033.     .dc.l    PAD_TYPE_PS*65536+$01,MSG_DATA_PAD_PSMOUSE
  3034.     .dc.l    PAD_TYPE_PS*65536+$02,MSG_DATA_PAD_PSA1
  3035.     .dc.l    PAD_TYPE_PS*65536+$04,MSG_DATA_PAD_PSD
  3036.     .dc.l    PAD_TYPE_PS*65536+$05,MSG_DATA_PAD_PSA2
  3037.     .dc.l    PAD_TYPE_PS*65536+$07,MSG_DATA_PAD_PSA2
  3038.     .dc.l    PAD_TYPE_PS*65536+$0e,MSG_DATA_PAD_PSJOGCON
  3039.     .dc.l    PAD_TYPE_PS*65536+$0f,MSG_DATA_PAD_PSNC
  3040.     .dc.l    $ffffffff,MSG_DATA_PAD_UNKNOW
  3041.  
  3042. SW_L:
  3043.     .dcb.b    16,0
  3044.     .dcb.b    16,0
  3045.     .dcb.b    16,0
  3046.     .dcb.b    16,0
  3047.     .dcb.b    16,0
  3048.     .dcb.b    16,0
  3049.     .dcb.b    16,0
  3050. SW_D:
  3051.     .dc.b    0
  3052. SW_I:
  3053.     .dc.b    0
  3054. SW_R:
  3055.     .dc.b    0
  3056. SW_M:
  3057.     .dc.b    0
  3058. SW_T:
  3059.     .dc.b    0
  3060. SW_S:
  3061.     .dcb.b    JOY_MAX,0
  3062. SW_E:
  3063.     .dcb.b    JOY_MAX,0
  3064. SW_P:
  3065.     .dcb.b    JOY_MAX,0
  3066. SW_B:
  3067.     .dcb.b    JOY_MAX,0
  3068. .even
  3069. TITLE:
  3070.     .dc.b    $0d,$0a
  3071.     .dc.b    'JOYSTICK DRIVER for X680x0 version 2.20',$0d,$0a
  3072.     .dc.b    'Copyright 1994-99 by HUYE',$0d,$0a,0
  3073. TITLE2:
  3074.     .dc.b    'CPSF-PCアダプタ、MD変換コネクタの使用が可能です',$0d,$0a,0
  3075. TITLE3:
  3076.     .dc.b    '<usage> JOYDRV.X [option]',$0d,$0a
  3077.     .dc.b    '<option>',$0d,$0a
  3078.     .dc.b    ' /M0           .. MDマルチタップ及びSS,PS接続ケーブルを使用不可にする',$0d,$0a
  3079.     .dc.b    ' /M1           .. MDマルチタップ及びSS,PS接続ケーブルを使用可能にする(キャッシュ無し)',$0d,$0a
  3080.     .dc.b    ' /M2           .. MDマルチタップ及びSS,PS接続ケーブルを使用可能にする(キャッシュ有り)(def.)',$0d,$0a
  3081.     .dc.b    ' /B?           .. ビット変換無し(?はジョイスティック番号 0~6)(def.)',$0d,$0a
  3082.     .dc.b    ' /B?ファイル名 .. ビット変換有り(ファイル名は、変換データを格納しているファイル、',$0d,$0a
  3083.     .dc.b    '                                  ?はジョイスティック番号 0~6)',$0d,$0a
  3084.     .dc.b    ' /I0           .. ROM IOCS互換モード',$0d,$0a
  3085.     .dc.b    ' /I1           .. JOYDRV拡張モード(def.)',$0d,$0a
  3086.     .dc.b    ' /T?           .. マルチタップ使用時のマルチタップの最大パッド数(?は、0~9)(def.=',$2f+JOY_MAX,')',$0d,$0a
  3087.     .dc.b    ' /E?,?         .. アナログスティックの十字キーエミュレート指定',$0d,$0a
  3088.     .dc.b    '                   1つ目の?は、ジョイスティック番号 0~6',$0d,$0a
  3089.     .dc.b    '                   2つ目の?は、0~F(def.=3)',$0d,$0a
  3090.     .dc.b    ' /P?,??        .. 十字キーエミュレート時のしきい値指定',$0d,$0a
  3091.     .dc.b    '                   1つ目の?は、ジョイスティック番号 0~6',$0d,$0a
  3092.     .dc.b    '                   2つ目の??は、00~7F(def.=4F)',$0d,$0a
  3093.     .dc.b    ' /S?,?         .. START,SELECTボタンの動作モード指定',$0d,$0a
  3094.     .dc.b    '                   1つ目の?は、ジョイスティック番号 0~6',$0d,$0a
  3095.     .dc.b    '                   2つ目の?は、0で通常モード、1でFM-TOWNSモード(def.=0)',$0d,$0a
  3096.     .dc.b    ' /L?,?,??,??   .. 連射モード指定',$0d,$0a
  3097.     .dc.b    '                   1つ目の?は、ジョイスティック番号 0~6',$0d,$0a
  3098.     .dc.b    '                   2つ目の?は、ビット位置 0~F',$0d,$0a
  3099.     .dc.b    '                   3つ目の??は、連射時のON回数 00~FF',$0d,$0a
  3100.     .dc.b    '                   4つ目の??は、連射時のOFF回数 00~FF',$0d,$0a
  3101.     .dc.b    '                     ON回数とOFF回数の両方に00を設定すると連射モードが解除されます',$0d,$0a
  3102.     .dc.b    ' /D            .. 設定状態の表示禁止',$0d,$0a
  3103.     .dc.b    ' /R            .. 常駐解除(コマンドラインからの実行時のみ有効)',$0d,$0a
  3104.     .dc.b    '/は-でも可、アルファベットは小文字も可',$0d,$0a,0
  3105. MSG_DATA1:
  3106.     .dc.b    'JOYDRVは既に登録されています',$0d,$0a,0
  3107. MSG_DATA2:
  3108.     .dc.b    'JOYDRVは既に常駐しています',$0d,$0a,0
  3109. MSG_DATA3:
  3110.     .dc.b    'JOYDRVは常駐していません',$0d,$0a,0
  3111. MSG_DATA4:
  3112.     .dc.b    'JOYDRVは常駐しました',$0d,$0a,0
  3113. MSG_DATA5:
  3114.     .dc.b    'JOYDRVの常駐を解除しました',$0d,$0a,0
  3115. MSG_DATA6:
  3116.     .dc.b    'IOCS$3Bのベクタが変更されているかJOYDRVのバージョンが違うので常駐が解除できません',$0d,$0a,0
  3117. MSG_DATA10:
  3118.     .dc.b    'パラメータ指定に誤りがあります',$0d,$0a,0
  3119. MSG_DATA11:
  3120.     .dc.b    '変換データファイルの読み込みに失敗しました',$0d,$0a,0
  3121. MSG_DATA20:
  3122.     .dc.b    'MDマルチタップ及びSS,PSパッド接続ケーブルは使用',0
  3123. MSG_DATA21:
  3124.     .dc.b    'できません',$0d,$0a,0
  3125. MSG_DATA22:
  3126.     .dc.b    '可能です(キャッシュ無し)',$0d,$0a,0
  3127. MSG_DATA23:
  3128.     .dc.b    '可能です(キャッシュ有り)',$0d,$0a,0
  3129. MSG_DATA24:
  3130.     .dc.b    'JOYDRV拡張モードで動作しています',$0d,$0a,0
  3131. MSG_DATA25:
  3132.     .dc.b    'ROM IOCS互換モードで動作しています',$0d,$0a,0
  3133. MSG_DATA30:
  3134.     .dc.b    'JOY番号     連射モード     ビット変換  スタートセレクトモード  パッドタイプ  接続   十字キーエミュレート  しきい値',$0d,$0a,0
  3135. MSG_DATA31:
  3136.     .dc.b    '   '
  3137.     .dc.b    '0     ',0
  3138. MSG_DATA32:
  3139.     .dc.b    '    ',0
  3140. MSG_DATA33:
  3141.     .dc.b    '    ',0
  3142. MSG_DATA34:
  3143.     .dc.b    '  ',0
  3144. MSG_DATA36:
  3145.     .dc.b    '       ',0
  3146. MSG_DATA37:
  3147.     .dc.b    '03          ',0
  3148. MSG_DATA38:
  3149.     .dc.b    '4F',$0d,$0a,0
  3150. MSG_DATA39:
  3151.     .dc.b    '  ',0
  3152. MSG_DATA40:
  3153.     .dc.b    '無し',0
  3154. MSG_DATA41:
  3155.     .dc.b    '有り',0
  3156. MSG_DATA42:
  3157.     .dc.b    '通常        ',0
  3158. MSG_DATA43:
  3159.     .dc.b    'FM-TOWNS    ',0
  3160. MSG_DATA44:
  3161.     .dc.b    'PORT1',0
  3162. MSG_DATA45:
  3163.     .dc.b    'PORT2',0
  3164. MSG_DATA46:
  3165.     .dc.b    '-----',0
  3166. MSG_DATA47:
  3167.     .dc.b    '---------',0
  3168. MSG_DATA_PAD_UNKNOW:
  3169.     .dc.b    '不明     ',0
  3170. MSG_DATA_PAD_ATARI:
  3171.     .dc.b    'アタリ   ',0
  3172. MSG_DATA_PAD_MD3:
  3173.     .dc.b    'メガドラ3B ',0
  3174. MSG_DATA_PAD_MD6:
  3175.     .dc.b    'メガドラ6B ',0
  3176. MSG_DATA_PAD_MDNC:
  3177.     .dc.b    'メガドラN.C',0
  3178. MSG_DATA_PAD_SSD:
  3179.     .dc.b    'SSデジタル ',0
  3180. MSG_DATA_PAD_SSA:
  3181.     .dc.b    'SSアナログ  ',0
  3182. MSG_DATA_PAD_SSNC:
  3183.     .dc.b    'SS N.C.  ',0
  3184. MSG_DATA_PAD_PSD:
  3185.     .dc.b    'PSデジタル ',0
  3186. MSG_DATA_PAD_PSA2:
  3187.     .dc.b    'PSアナログ2 ',0
  3188. MSG_DATA_PAD_PSA1:
  3189.     .dc.b    'PSアナログ1 ',0
  3190. MSG_DATA_PAD_PSMOUSE:
  3191.     .dc.b    'PSマウス ',0
  3192. MSG_DATA_PAD_PSJOGCON:
  3193.     .dc.b    'PSジョグコン',0
  3194. MSG_DATA_PAD_PSNC:
  3195.     .dc.b    'PS N.C.  ',0
  3196. .end    MAIN
  3197.